当前位置:  开发笔记 > 数据库 > 正文

SQL函数作为默认参数值?

如何解决《SQL函数作为默认参数值?》经验,为你挑选了4个好方法。

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

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

并且所有SQL预编译器都给了我这个错误:

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

我已经创建了这个程序.(我不确定这是否相关.)我正在使用null默认值并稍后检查,但这似乎不合适.我可以在一行中做到这一点吗?


更新:我将关闭MSDN对存储过程参数的描述:

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

注意:
除varchar(max)和varbinary(max)数据类型外,可以为CLR函数指定缺省参数值.

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

我读错了吗?

非常感谢.



1> Brian Kim..:

存储过程参数的默认值必须是常量.你需要做以下事情......

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


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

2> Otávio Décio..:

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

但是你可以这样做:

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



3> 小智..:

您可以尝试如下:

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



4> Bill Karwin..:

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

来自MSDN:

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

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

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有