SQL 函数作为默认参数值?

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

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

and all the SQL pre-compiler gave me was this error:

Msg 102,级别15,状态1,过程 my _ sp,第8行’(’附近语法不正确。

我已经创建了程序。(我不确定这是否相关。)我使用了一个空默认值,并在以后检查它,但这似乎不太合适。我能一句话说完吗?


更新: 我正要离开 MSDN 对存储过程参数的描述:

[ = default ]是参数的默认值。如果定义了默认值,则可以在不为该参数指定值的情况下执行该函数。

注:
可以为 CLR 函数指定默认参数值,除了 varchar (max)和 varbinary (max)数据类型之外。

当函数的参数具有默认值时,在调用函数以检索默认值时,必须指定关键字 DEFAULT。此行为不同于在存储过程中使用具有默认值的参数,在存储过程中省略参数也意味着默认值。

我看错了吗?

非常感谢。

99319 次浏览

I don't think that is possible, you have to use a literal (constant) value as the default.

你可以这样做:

Set @currentDate = Coalesce(@currentDate , GetDate())

存储过程参数的默认值必须是 常数。 You'd need to do the following...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()

该值不是确定的,不能使用

我推断你在示例中使用了方括号中的 Microsoft SQL Server。

来自 MSDN:

Only a constant value, such as a 字符串; 标量函数 (系统、用户定义或 CLR 或 NULL 可用作 违约。

The function GETDATE() returns a different value from time to time, so it is not a constant expression.

建议:

将默认值设置为 NULL

在前端执行默认 GETDATE()

You can try as follow:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())