给存储过程传值

当你调用一个存储过程时,你可以使用参数来传值给它,从而使你的存储过程变得非常的灵活。比如,你想修改过程check_philosophers,使之能够检测是否存在某一个哲学家。你可以使用如下的语句进行修改:

CREATE PROCEDURE check_philosophers

(@philosopher VARCHAR(30))

AS

IF EXISTS(SELECT name FROM Philosophers WHERE name=@philosopher)

PRINT A philosopher

ELSE

PRINT Not a philisopher

当该过程执行时,它检查传递给变量@philosopher的姓名是否存在于表Philosophers中。假如@philosopher的值存在于表中,打印文本A philosopher,否则打印文本Not a philisopher

当你在存储过程中包含参数时,你把它们列在CREATE PROCEDURE语句的后面的括号内,但必须在关键词AS之前。对于每一个参数,你都必须指明数据类型。在一个单独的过程中,你最多能设置255个参数。比如下面的过程检查是否在传递的姓名当中,至少有一个是哲学家的姓名:

CREATE PROCEDURE check_philosophers

(@firstname VARCHAR(30),@secondname VARCHAR(30))

AS

IF EXISTS(SELECT name FROM Philosophers

WHERE name=@firstname OR name=@secondname)

PRINT At least one of them is a philosopher

ELSE

PRINT Neither one of them is a philisopher

为了执行一个具有一个或多个参数的存储过程,你只需简单地在存储过程名称的后面列出参数的值。比如下面的语句检查Plato和Aristotle中是否至少有一个是哲学家:

EXECUTE check_philisophers Plato,Aristotle

假如一个存储过程具有多个参数。你必须以正确的顺序来传值。有时候这并不是很方便。你可以使用另一种方法,通过名称来传递参数,如下所示:

EXECUTE check_philisophers @firstname=Plato, @secondname=Aristotle

该语句完成于前一语句完全相同的事情。然而通过使用参数名,你可以使用任何你想要的顺序来传递参数。