我尝试用以下方法更改默认参数值:
ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()
并且所有SQL预编译器都给了我这个错误:
Msg 102,Level 15,State 1,Procedure my_sp,Line 8'('。
附近的语法不正确
我已经创建了这个程序。 (我不确定这是否相关。)我正在使用null默认值并稍后检查,但这似乎不合适。我能在一行中做到这一点吗?
<小时/> 更新:我离开了MSDN's description of stored procedure parameters:
[= default]是参数的默认值。如果定义了默认值,则可以在不指定该参数值的情况下执行该函数。
注意:
除varchar(max)和varbinary(max)数据类型外,可以为CLR函数指定缺省参数值。当函数的参数具有默认值时,必须在调用函数时指定关键字DEFAULT以检索默认值。此行为与在存储过程中使用具有默认值的参数不同,其中省略参数也意味着默认值。
我读错了吗?
非常感谢。
答案 0 :(得分:145)
存储过程参数的默认值必须为 常量 。 您需要执行以下操作...
ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()
答案 1 :(得分:32)
我认为不可能,你必须使用文字(常量)值作为默认值。
但是你可以这样做:
Set @currentDate = Coalesce(@currentDate , GetDate())
答案 2 :(得分:12)
您可以尝试如下:
Set @CurrentDate=IsNull(@CurrentDate,GetDate())
答案 3 :(得分:7)
我推断您在示例中使用方括号中的Microsoft SQL Server。
来自MSDN:
只有一个常数值,例如a 字符串;标量函数 (系统,用户定义或CLR 功能);或NULL可以用作 默认值。
函数GETDATE()
不时返回不同的值,因此它不是常量表达式。
答案 4 :(得分:2)
该值不具有确定性且无法使用
答案 5 :(得分:0)
建议:
将默认值设为NULL
在前端执行默认GETDATE()
。