【问题标题】:Cannot supply a parameter to my Stored Proc [duplicate]无法为我的存储过程提供参数 [重复]
【发布时间】: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 传递给您的存储过程以使其工作呢?

标签: tsql stored-procedures


【解决方案1】:
Declare @MyDate Datetime = getdate()
EXEC dbo.UpdateLastCleanDatesNormalSchedule @MyDate 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多