我可以将sql存储过程参数默认为动态表达式吗?

时间:2011-03-08 08:09:07

标签: sql stored-procedures dynamic default

我希望在存储过程中有一个“@myDate”参数,如果没有指定其他内容,则默认为今天之前的2年。我尝试在我的程序定义中做这样的事情:

CREATE PROCEDURE myProcedure(   @param1 int,
                                @param2 varchar(20),
                                @param3 int = null,
                                @myDate datetime = dateadd(year,-2,getDate()) )

我收到以下语法错误:

Incorrect syntax near '('.

sql server是否允许您将动态表达式设置为默认参数值?如果没有,我怎么能绕过这个(除了笨拙的IF @myDate is null SET @myDate=...)?

2 个答案:

答案 0 :(得分:9)

您不能将表达式用作默认值,并且没有非常优雅的方法。

您可以使用isnullcoalesce代替if声明:

set @myDate = isnull(@myDate, dateadd(year, -2, getdate()))

答案 1 :(得分:1)

没有

来自docs

  

默认值必须是常量   或者它可以是NULL