我想知道为什么我不能将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() ...
答案 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())