SQL函数是否作为默认参数值?


105

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

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

而所有的SQL预编译器给我的都是这个错误:

消息102,级别15,状态1,过程my_sp,第8行'('附近的语法不正确。

我已经创建了过程。(我不确定这是否相关。)我使用的是空默认值,以后再检查它,但这似乎不合适。我可以一行完成吗?


更新:我不打算使用MSDN对存储过程参数的描述

[= default]是参数的默认值。如果定义了默认值,则无需指定该参数的值即可执行该函数。

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

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

我读错了吗?

非常感谢。

Answers:


160

存储过程参数的默认值必须为常量。您需要执行以下操作...

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

36
或SET @currentDate = COALESCE(@ currentDate,GETDATE())
SQLMenace

我以前用过。“我使用的是空默认值,以后再检查它,但这似乎不合适。” 还是谢谢布莱恩。
user58044

这个解决方案是完美的。
R.Katnaan


13

您可以尝试如下操作:

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

8

我从示例中的方括号中推断出您正在使用Microsoft SQL Server。

MSDN

仅一个常量值,例如字符串;标量函数(系统函数,用户定义函数或CLR函数);或NULL可以用作默认值。

该函数GETDATE()有时会返回不同的值,因此它不是常量表达式。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.