我在工作中有以下查询,它安排为每小时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
此查询不更新任何内容
表格:
有人可以帮我吗?
您要做的就是使用CASE编写UPDATE查询,您不需要遍历每一行来更新它。
UPDATE table
SET Activo = case when fch_fin <= getdate() then 0 else 1 end