也许我有一个'下午'的时刻,但任何人都可以解释为什么我
Msg 102,Level 15,State 1,Line 2
')'附近的语法不正确。
运行时
CREATE PROC DisplayDate
(@DateVar DATETIME)
AS
BEGIN
SELECT @DateVar
END
GO
EXEC DisplayDate GETDATE();
答案 0 :(得分:148)
您不能将函数调用作为参数传递给存储过程。而是使用中间变量:
DECLARE @tmp DATETIME
SET @tmp = GETDATE()
EXEC DisplayDate @tmp;
答案 1 :(得分:19)
正如 Mitch Wheat 所提到的,你无法传递一个功能。
如果在您的情况下您应该传入预先计算的值或GETDATE() - 您可以使用默认值。例如,修改存储过程:
ALTER PROC DisplayDate
(
@DateVar DATETIME = NULL
) AS
BEGIN
set @DateVar=ISNULL(@DateVar,GETDATE())
--the SP stuff here
SELECT @DateVar
END
GO
然后尝试:
EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate
备注:我认为这个参数没有使用NULL值。如果不是您的情况 - 您可以使用另一个未使用的值,例如'1900-01-01 00:00:00.000'
答案 2 :(得分:0)
我找到的解决方案是在执行之前声明临时变量并将它们传递到执行行中,例如
`声明@ddate 日期
set ddate = getdate()
EXEC DisplayDate @ddate;`