SQL函数作为默认参数值?

时间:2009-01-22 20:25:02

标签: sql sql-server stored-procedures

我尝试用以下方法更改默认参数值:

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以检索默认值。此行为与在存储过程中使用具有默认值的参数不同,其中省略参数也意味着默认值。

我读错了吗?

非常感谢。

6 个答案:

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