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

Posted

技术标签:

【中文标题】SQL Server 存储过程中的可选参数?【英文标题】:optional parameters in SQL Server stored proc? 【发布时间】:2010-12-21 02:31:02 【问题描述】:

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

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

【问题讨论】:

在 Erland 的网站上仔细阅读,他有一些关于动态搜索条件的重要信息:sommarskog.se/dyn-search.html 【参考方案1】:

你可以这样声明

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

【讨论】:

如果参数是uniqueidentifier的类型怎么办?前任。 @userId 唯一标识符 回答@RKSharma 给任何想知道的人 - 它与 uniqueidentifiers 的作用相同。【参考方案2】:

是的,是的。声明参数如下:

@Sort varchar(50) = NULL

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

【讨论】:

你甚至不需要= NULL 你确定不需要吗? OMG Ponies,如果你不包含 = ,那么该参数将是必需的。您可以将其作为 NULL 传递,但随后您只需将该逻辑转移到使用该过程的应用程序。 补充亚伦的观点。如果要向现有存储过程添加新的可选参数,最好使用“= NULL”。原因是,您可能不知道调用此 proc 的所有代码。因此,除非您使用“= NULL”将其设为可选,否则对于您可能错过传递值的所有地方,它将中断。 nanonerd: 2014 及更高版本至少您可以设置默认值,当您不传递该参数时,它将采用该值而不是错误。至少 2014 年对我来说是这样的【参考方案3】:

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

exec getlist 47,1,0

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

【讨论】:

甜蜜!上次我尝试使用 Sql 2012 时,它仍然需要您传入 NULL 以获取默认值。很高兴知道他们终于取消了这个要求,并把它们变成了真正的可选

以上是关于SQL Server 存储过程中的可选参数?的主要内容,如果未能解决你的问题,请参考以下文章

SQL server T-SQL存储过程

我需要一种策略来处理 CDK 中的可选 SSM 参数存储参数

sql server中的存储过程最多可以有多少参数

如何在sql server中创建一个存储过程中的varchar型的输入参数默认值为空

SQL-Server存储过程中的参数问题!

几个SQL Server的查询题!