SQL Server中每小时更新字段

问题描述 投票:0回答:1

我在工作中有以下查询,它安排为每小时L-V运行。

[FCH_FIN字段中的表中所做的所有记录都有确切的时间,例如:7:00:00到19:00:00。

然后我创建一个临时表并传递原始表中的数据,我想遍历该临时表以获取使用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  

此查询不更新任何内容

表格:

enter image description here

有人可以帮我吗?

sql sql-server jobs
1个回答
0
投票

您要做的就是使用CASE编写UPDATE查询,您不需要遍历每一行来更新它。

UPDATE table
SET Activo = case when fch_fin <= getdate() then 0 else 1 end
© www.soinside.com 2019 - 2024. All rights reserved.