sql - 设置 SQL Server 存储过程的默认参数

标签 sql sql-server datetime parameters

我正在尝试将@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/

相关文章:

javascript - 日期字符串转换浏览器与夏令时的差异

mysql - 如何添加 SELECT 语句结果?

sql - 如何在分页结果 View 中获取总结果数?

sql - 即使特定范围内没有任何数据,如何返回空数据?

python - 有没有一种简单的方法可以在 Python 中增加一个 datetime 对象一个月?

mysql - 计算同一字段不同时间之间的最大间隔MYSQL

MySQL 动态数据透视表

mysql - 为什么这个 group by 语句不返回任何行?

sql-server - 几何列: STGeomFromText and SRID (what is an SRID?)

sql-server - 使用 SMO 重新启动 SQL Server 实例