SQL函数作为默认参数值?

Posted

技术标签:

【中文标题】SQL函数作为默认参数值?【英文标题】:SQL function as default parameter value? 【发布时间】:2010-10-03 00:13:14 【问题描述】:

我尝试用这个来改变默认参数值:

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

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

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

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


更新:我要离开MSDN's description of stored procedure parameters:

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

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

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

我是不是看错了?

非常感谢。

【问题讨论】:

【参考方案1】:

我认为这是不可能的,您必须使用文字(常量)值作为默认值。

但是你可以这样做:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

或 SET @currentDate = COALESCE(@currentDate,GETDATE()) 我以前用过那个。 “我使用的是空默认值并稍后检查它,但它似乎不合适。”仍然感谢布赖恩。 这个解决方案很完美。【参考方案3】:

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

【讨论】:

【参考方案4】:

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

来自MSDN:

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

函数GETDATE()时不时返回不同的值,所以不是常量表达式。

【讨论】:

【参考方案5】:

建议:

将默认设置为NULL

在前端默认GETDATE()

【讨论】:

【参考方案6】:

你可以尝试如下:

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

【讨论】:

以上是关于SQL函数作为默认参数值?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 自定义函数(Function)——参数默认值

SQL 自定义函数(Function)——参数默认值

SQL Server 自定义函数(Function)——参数默认值

38 py改变函数参数的值关键字参数和参数默认值函数中可变参数将序列中的元素值作为函数对应的参数值传

AttributeError:将 sql 函数作为默认参数传递时,“NoneType”对象没有属性“_jvm”

将列表对象作为函数参数传递(而不是默认值),是否有任何陷阱?