是否可以将sql存储过程参数默认为动态表达式?
我希望在存储过程中有一个“@myDate”参数,如果没有指定其他参数,则该参数默认为今天之前的2年。在我的过程定义中,我尝试过这样做:是否可以将sql存储过程参数默认为动态表达式?,sql,stored-procedures,dynamic,default,Sql,Stored Procedures,Dynamic,Default,我希望在存储过程中有一个“@myDate”参数,如果没有指定其他参数,则该参数默认为今天之前的2年。在我的过程定义中,我尝试过这样做: CREATE PROCEDURE myProcedure( @param1 int, @param2 varchar(20), @param3 int = null,
CREATE PROCEDURE myProcedure( @param1 int,
@param2 varchar(20),
@param3 int = null,
@myDate datetime = dateadd(year,-2,getDate()) )
我发现以下语法错误:
Incorrect syntax near '('.
sql server是否允许您将动态表达式设置为默认参数值?如果没有,我该如何解决这个问题(如果@myDate设置为null@myDate=…,那么除了笨拙的)之外?否
从:
默认值必须是常量
或者它可以是空的
您不能使用表达式作为默认值,也没有真正优雅的方法来实现这一点
您可以使用isnull
或coalesce
代替if
语句:
set @myDate = isnull(@myDate, dateadd(year, -2, getdate()))
笨拙和懒惰之间有细微的区别。