SQL Server存储过程中的可选参数?

时间:2009-11-27 21:09:28

标签: sql-server-2008 stored-procedures optional-parameters

我正在SQL Server 2008中编写一些存储过程,并想知道这里是否可以使用可选输入参数的概念?

我想我总是可以为我不想使用的参数传递NULL,检查存储过程中的值,然后从那里拿东西,但我感兴趣的是这里有这个概念。谢谢!

3 个答案:

答案 0 :(得分:173)

您可以像这样声明

CREATE PROCEDURE MyProcName
    @Parameter1 INT = 1,
    @Parameter2 VARCHAR (100) = 'StringValue',
    @Parameter3 VARCHAR (100) = NULL
AS

/* check for the NULL / default value (indicating nothing was passed */
if (@Parameter3 IS NULL)
BEGIN
    /* whatever code you desire for a missing parameter*/
    INSERT INTO ........
END

/* and use it in the query as so*/
SELECT *
FROM Table
WHERE Column = @Parameter

答案 1 :(得分:48)

是的,确实如此。声明参数如下:

@Sort varchar(50) = NULL

现在您甚至不必传入参数。它将默认为NULL(或您选择默认为的任何内容)。

答案 2 :(得分:0)

2014及更高版本至少可以设置一个默认值,并且在不传递该参数时会采用该值,并且不会出现错误。部分示例:将第3个参数添加为可选参数。仅使用前两个参数的实际过程的执行程序工作正常

exec getlist 47,1,0

create procedure getlist
   @convId int,
   @SortOrder int,
   @contestantsOnly bit = 0
as