1
我试图将默认值@Day
设置为当天。但是,我在初始DATEADD(Day, DATEDIFF(Day, 0, GETDATE()), 0)
和其下的所有@Day
s上遇到了一些错误。我认为@Day DateTime
下的ALTER过程中声明@Day
但我得到的错误:设置SQL Server存储过程的默认参数
Must declare the scalar variable "@Day"
任何人都知道该怎么办?
ALTER PROCEDURE [dbo].[InsertWeeklyRuns]
@Day DateTime = DATEADD(Day, DATEDIFF(Day, 0, GETDATE()), 0)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Enddate DATETIME
DECLARE @StartDate DATETIME
DECLARE @F1Runs INT
DECLARE @F2Runs INT
DECLARE @F3Runs INT
DECLARE @F1Alarms INT
DECLARE @F2Alarms INT
DECLARE @F3Alarms INT
SET @Day = DATEADD(dd, DATEDIFF(dd, 0, @Day), 0)
SET @Enddate = CASE
WHEN @Day > DATEADD(Day, DATEDIFF(Day, 0, GETDATE()), 0)
THEN DATEADD(Day, DATEDIFF(Day, 0, GETDATE()), 0)
ELSE DATEADD(Day, 1, @Day)
END
SET @StartDate = @Enddate - 7
感谢
有些东西似乎有点过这里。你正在设置你的变量,然后用case表达式检查它的值。既然你只是设置它,使用case表达式没有意义,它总是会返回第一个值。 –
您不能指定一个不确定的默认值(例如'getdate()'或其任何变体)。相反,将默认设置为“null”。然后在你的proc体内,如果'@ day'为空,将它设置为你想要的默认值。 'select @Day = isnull(@day,cast(getdate()as date))' – Xedni
@SeanLange All'Set @Day = DATEADD(dd,DATEDIFF(dd,0,@Day),0)从任何'@ Day'设定的时间。例如,如果某人设置了“@Day = 5/20/16 4:57”,则“@Day =设置@Day = DATEADD(dd,DATEDIFF(dd,0,@Day),0)'将带走4: 57。如果'@ Day'被设置为将来的某一天,案例陈述就会发挥作用。 – MadelineK