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,如果你不包含 = 2014 及以上至少您可以设置一个默认值,当您不传递该参数时,它将采用该值而不是错误。部分示例:第三个参数作为可选添加。只有前两个参数的实际过程的执行工作正常
exec getlist 47,1,0
create procedure getlist
@convId int,
@SortOrder int,
@contestantsOnly bit = 0
as
【讨论】:
甜蜜!上次我尝试使用 Sql 2012 时,它仍然需要您传入 NULL 以获取默认值。很高兴知道他们终于取消了这个要求,并把它们变成了真正的可选。以上是关于SQL Server 存储过程中的可选参数?的主要内容,如果未能解决你的问题,请参考以下文章
我需要一种策略来处理 CDK 中的可选 SSM 参数存储参数