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
我在作业中有以下查询,计划 运行 每小时 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