【发布时间】:2016-10-20 14:25:53
【问题描述】:
我有一个如下所示的存储过程:
CREATE PROC [dbo].[UpdateLastCleanDatesNormalSchedule]
@BaseDate DATETIME = NULL
AS
IF @BaseDate IS NULL
SET @BaseDate=GETDATE()
UPDATE Locations
SET LastCleaned=dbo.fnFindTheLastDay(vw.CleanDay,@BaseDate,LastCleaned)
FROM Locations
INNER JOIN vwMostRecentCleanDay vw ON
Locations.NormalFrequencyCode=vw.FrequencyCode
如您所见,代码非常简单,调用一个函数来更新街道清洁数据库的数据,其中包含上次清洁该位置的日期。
这是我的问题。 这有效:
EXEC dbo.UpdateLastCleanDatesNormalSchedule
但这不是:
EXEC dbo.UpdateLastCleanDatesNormalSchedule GETDATE()
这也不是:
EXEC dbo.UpdateLastCleanDatesNormalSchedule @BaseDate=GETDATE()
其中任何一个都会导致错误
Incorrect syntax near ')'.
如果我将鼠标悬停在摇摆不定的红线上,通过调用 GETDATE() 的右括号,工具提示会报告“')' 附近的语法不正确。期待 SELECT 或 '('。
如果我想输入一个特定的日期并试试这个:
EXEC dbo.UpdateLastCleanDatesNormalSchedule CONVERT(Datetime,'01 September 2016')
我得到了错误
Incorrect syntax near the keyword 'CONVERT'.
但如果我将日期作为纯字符串传递:
EXEC dbo.UpdateLastCleanDatesNormalSchedule '01 September 2016'
然后就可以了。
绝望地希望这是某种故障而不是我的错误,我尝试删除并重新创建 proc,但没有运气。
我很困惑。任何人都可以帮忙吗?
【问题讨论】:
-
既然您已经在参数值为 NULL 时使用了
GETDATE(),为什么不直接将 NULL 传递给您的存储过程以使其工作呢?