Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以将sql存储过程参数默认为动态表达式?_Sql_Stored Procedures_Dynamic_Default - Fatal编程技术网

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

是否可以将sql存储过程参数默认为动态表达式?,sql,stored-procedures,dynamic,default,Sql,Stored Procedures,Dynamic,Default,我希望在存储过程中有一个“@myDate”参数,如果没有指定其他参数,则该参数默认为今天之前的2年。在我的过程定义中,我尝试过这样做: CREATE PROCEDURE myProcedure( @param1 int, @param2 varchar(20), @param3 int = null,

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

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()))

笨拙和懒惰之间有细微的区别。