SQL函数作为默认参数值?

我试着改变一个默认的参数值:

ALTER PROCEDURE [dbo].[my_sp] @currentDate datetime = GETDATE() 

和所有的SQL预编译器给我这个错误:

Msg 102,Level 15,State 1,Procedure my_sp,Line 8'(')附近语法不正确。

我已经创build了这个程序。 (我不知道这是相关的。)我使用一个空的默认值,并稍后检查,但这似乎不正确。 我可以在一行吗?


更新:我正在脱离MSDN的存储过程参数的描述 :

[= default]是参数的默认值。 如果定义了默认值,则可以执行该function而不指定该参数的值。

注意:
除了varchar(max)和varbinary(max)数据types外,可以为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 :

只有一个常量值,比如一个string; 标量函数(系统,用户定义或CLR函数); 或者NULL可以用作默认值。

函数GETDATE()不时返回一个不同的值,所以它不是一个常量expression式。

该值不确定,不能使用

build议:

将默认值设置为NULL

在前端执行默认的GETDATE()