我尝试用以下方法更改默认参数值:
ALTER PROCEDURE [dbo].[my_sp] @currentDate datetime = GETDATE()
并且所有SQL预编译器都给了我这个错误:
消息102,级别15,状态1,过程my_sp,行8'''附近的语法不正确.
我已经创建了这个程序.(我不确定这是否相关.)我正在使用null默认值并稍后检查,但这似乎不合适.我可以在一行中做到这一点吗?
[= default]是参数的默认值.如果定义了默认值,则可以在不指定该参数值的情况下执行该函数.
注意:
除varchar(max)和varbinary(max)数据类型外,可以为CLR函数指定缺省参数值.当函数的参数具有默认值时,必须在调用函数时指定关键字DEFAULT以检索默认值.此行为与在存储过程中使用具有默认值的参数不同,其中省略参数也意味着默认值.
我读错了吗?
非常感谢.
存储过程参数的默认值必须是常量.你需要做以下事情......
ALTER Procedure [dbo].[my_sp] @currentDate datetime = null AS IF @currentDate is null SET @currentDate = getdate()
我不认为这是可能的,您必须使用文字(常量)值作为默认值.
但是你可以这样做:
Set @currentDate = Coalesce(@currentDate , GetDate())
您可以尝试如下:
Set @CurrentDate=IsNull(@CurrentDate,GetDate())
我推断您在示例中使用方括号中的Microsoft SQL Server.
来自MSDN:
只有一个常量值,例如字符串; 标量函数(系统,用户定义或CLR函数); 或NULL可以用作默认值.
该函数GETDATE()
不时返回不同的值,因此它不是常量表达式.