SQL函数作为默认参数值?

标签 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 Incorrect syntax near '('.

我已经创建了该过程。 (我不确定这是否相关。)我使用了空默认值并稍后检查,但这似乎不合适。我可以在一行中完成此操作吗?

<小时/> 更新:我要离开MSDN's description of stored procedure parameters :

[ = default ] Is a default value for the parameter. If a default value is defined, the function can be executed without specifying a value for that parameter.

Note:
Default parameter values can be specified for CLR functions except for the varchar(max) and varbinary(max) data types.

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

我读错了吗?

非常感谢。

最佳答案

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

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

关于SQL函数作为默认参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/470664/

相关文章:

sql - 选择唯一的记录并在 rails 中显示为类别标题

php - 这个查询是否容易受到 sql 注入(inject)的攻击?

SQL查询获取特定时间段内的活跃员工

mysql - SQL 表 - 根据其他 2 个表的条件计算 table1 的行数

sql-server - 在 SQLCMD for Linux 中使用变量

sql-server-2005 - 从 Mule 3.5.0 ESB 中的存储过程调用获取返回值

mysql - SQL - 有什么方法可以简单计算吗?

sql - 测试 MySQL 表中是否存在行的最佳方法

sql - 存储过程将不返回任何错误消息或编号

sql-server - 如何在 SQL Server 中有条件地创建存储过程?