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

fro*_*die 7 sql stored-procedures default dynamic

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

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

我收到以下语法错误:

Incorrect syntax near '('.
Run Code Online (Sandbox Code Playgroud)

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

Guf*_*ffa 10

您不能将表达式用作默认值,并且没有非常优雅的方法来执行此操作.

您可以使用isnullcoalesce代替if语句:

set @myDate = isnull(@myDate, dateadd(year, -2, getdate()))
Run Code Online (Sandbox Code Playgroud)