为什么我们不能在stored procedure = getDate()中设置datetime参数的默认值?

时间:2010-06-19 10:20:39

标签: sql-server-2005 stored-procedures

我想知道为什么我不能将SP datetime参数的默认值设置为getdate(),如下所示:

Create PROCEDURE [dbo].[UPILog]
(
    @UserID bigint,
    @ActionID smallint,
    @Details nvarchar(MAX) = null,
    @Created datetime = getdate()
)

如果我尝试保存它会给我一个编译错误

    Msg 102, Level 15, State 1, Procedure UPILog, Line XX
    Incorrect syntax near '('.

编辑: 我知道我可以像下面这样做。

Create PROCEDURE [dbo].[UPILog]
(
    @UserID bigint,
    @ActionID smallint,
    @Details nvarchar(MAX) = null,
    @Created datetime = null
)
AS
if @Created is null
    SET @Created=getdate() ...

5 个答案:

答案 0 :(得分:17)

如果你想使用@Created作为默认值,那么将null设置为默认参数值,如果你的sp中带有null,则将@Created参数设置为getdate()。

    ...
    @CreateDate datetime = null
)
AS
    if @CreateDate is null
        set @CreateDate = getdate()
...

答案 1 :(得分:3)

您不能将函数调用用作默认参数值。

这很容易解决:如果没有设置,请将您的调用参数设置为getdate()

答案 2 :(得分:1)

简单来说,它必须是一些常量值,而GetDate()是一个函数调用。

答案 3 :(得分:1)

您不能将函数用作参数值。我所做的是将参数设置为某些超出范围的日期,例如' 1900-01-01'然后我在proc中检查它。例如:

CREATE PROC uspDataCompare  
    @CompareDate    DATE = '1900-01-01'
AS

IF  @CompareDate = '1900-01-01' SET @CompareDate = CONVERT(DATE, GETDATE())

答案 4 :(得分:0)

  ....     
  @CreateDate datetime = null
)

然后使用如下所示的COALESCE()-

COALESCE(@CreateDate, getdate())