使用GetDate()作为T-SQL中SP的默认参数不起作用

时间:2019-06-26 17:12:31

标签: sql-server tsql stored-procedures default-value

我正在尝试在TSQL中创建一个以月为参数(数字格式)的SP。我希望如果该参数被用户抑制,则SP将使用当前月份。

我尝试了这个,但是它说我使用了不正确的语法:

CREATE PROCEDURE myproc
    @month int = select Month(GetDate())

我在做什么错了?

谢谢!

1 个答案:

答案 0 :(得分:1)

您不能将func调用作为默认参数值传递:

CREATE PROCEDURE myproc
    @month int = select Month(GetDate())

应为:

CREATE PROCEDURE myproc
@month int = NULL
AS
BEGIN
 SET @month = COALESCE(@month, Month(GetDate()));

 SELECT @month;
END;

db<>fiddle demo

如果用户未提供@month的值,则默认情况下为NULL,而COALESCE将设置适当的值。