我正在尝试将@Day
的默认值设置为当前日期。但是,我在最初的 DATEADD(Day, DATEDIFF(Day, 0, GETDATE()), 0)
和下面的所有 @Day
上遇到了一些错误它。我认为 alter 过程下的 @Day DateTime
声明了 @Day
但我收到错误:
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
谢谢
最佳答案
这应该按您的预期工作:
CREATE PROCEDURE [dbo].[InsertWeeklyRuns]
@Day DateTime
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
DECLARE @today date = CAST(GETDATE() AS date);
IF @Day IS NULL
Set @Day = @today
Set @Enddate = CASE WHEN @Day >= @today THEN @today ELSE DATEADD(Day, 1, @Day) END
Set @StartDate = @Enddate - 7
END
关于sql - 设置 SQL Server 存储过程的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46224217/