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

lar*_*ryq 112 stored-procedures optional-parameters sql-server-2008

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

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

Raj*_*ore 186

你可以像这样声明

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
Run Code Online (Sandbox Code Playgroud)


Mik*_*ole 51

是的.声明参数如下:

@Sort varchar(50) = NULL
Run Code Online (Sandbox Code Playgroud)

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

  • OMG小马,如果你不包括= <NULL |某个默认值>,那么该参数将是必需的.您可以将其作为NULL传递,但之后您只需将该逻辑转移到使用该过程的应用程序. (41认同)
  • 加入Aaron的观点.如果要向现有存储过程添加新的可选参数,最好使用"= NULL".原因是,您可能不知道所有调用此proc的代码.因此,除非您使用"= NULL"使其成为可选项,否则对于您可能错过的所有传递值的地方,它将会中断. (9认同)
  • 你确定你不需要吗? (3认同)

bil*_*ock 9

至少在SQL Server 2014及更高版本中,您可以设置默认值,并且当您不传递该参数时,它将采用默认值而不是错误。

部分示例:第三个参数作为可选添加。exec仅使用前两个参数执行实际过程( ) 效果很好。

exec getlist 47,1,0

create procedure getlist
   @convId int,
   @SortOrder int,
   @contestantsOnly bit = 0
as
Run Code Online (Sandbox Code Playgroud)