152

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

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

4

3 回答 3

241

你可以这样声明

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
于 2009-11-27T21:19:07.953 回答
62

是的。声明参数如下:

@Sort varchar(50) = NULL

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

于 2009-11-27T21:11:20.117 回答
6

2014 及更高版本至少您可以设置默认值,当您不传递该参数时,它将采用该默认值而不是错误。部分示例:第三个参数作为可选添加。只有前两个参数的实际过程的执行工作正常

exec getlist 47,1,0

create procedure getlist
   @convId int,
   @SortOrder int,
   @contestantsOnly bit = 0
as
于 2018-11-15T18:22:18.510 回答