SQL 服务器每小时更新一次字段

update field every hour in SQL Server

我在作业中有以下查询,计划 运行 每小时 L-V。

在FCH_FIN字段中table的所有记录都有准确的时间,例如:7:00:00到19:00:00。

然后我创建一个临时table并从我原来的table传递数据,我想通过我的临时table来获得系统之间的时间差使用GETDATE()的时间和FCH_FIN字段中记录的时间,如果小于则更新active为0.

查询:

DECLARE @count INT;
DECLARE @fch2  DATETIME;
DECLARE @seconds INT;

CREATE table #Suple
(
    ID INT PRIMARY KEY NOT NULL,
    ACTIVO NCHAR(10) NOT NULL,
    FCH_INICIO DATETIME NOT NULL,
    FCH_FIN DATETIME NOT NULL
);

INSERT INTO #Suple 
    SELECT * 
    FROM Original 
    WHERE ACTIVO = 1 
      AND CONVERT(DATE, FCH_FIN) = CONVERT(DATE, GETDATE());

SELECT @count = COUNT(*) FROM #Suple;

WHILE @count > 0
BEGIN
    SELECT 
        @seconds = DATEDIFF(S, GETDATE(),FCH_FIN) 
    FROM
        #Suple 
    WHERE 
        ACTIVO = 1 
        AND CONVERT(DATE, FCH_FIN) = CONVERT(DATE, GETDATE())

    IF (@seconds < 3)
        UPDATE Original  
        SET ACTIVO = 0

    DELETE TOP(1) FROM #Suple
    SET @count = (SELECT COUNT(*) FROM #Suple);
END

DROP TABLE #Suple  

这个查询没有更新任何东西

Table:

有人可以帮助我吗?

你为什么首先要循环执行此操作?但是看看你的更新声明。您在循环的每次迭代中更新 Original 中的每一行。但这根本不应该使用循环。此处的整个代码块可以简化为一条语句。为此,您不需要临时表或循环。

在日期函数中使用 shorthand 也是 challenge

Update Original 
where ACTIVO = 0
    AND CONVERT(DATE, FCH_FIN) = CONVERT(DATE, GETDATE())
    and DATEDIFF(Second, GETDATE(),FCH_FIN) < 3