更新后触发:如何对更新的每一行执行查询
Trigger after update: How to execute query for every row updated
我在table中写了更新列(延迟)后执行查询的触发器,但有时更新的行很多如何解决?
CREATE OR ALTER TRIGGER notifRetard
ON Taches
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @value INT
IF UPDATE(retard)
-- How to make this for every row updated???
SELECT
@value = inserted.retard
FROM
inserted;
IF @value = 1
-- run SQL query
END
如果其他人需要,解决方案是使用 CURSOR。
CREATE or alter TRIGGER notifRetard
ON Taches
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE(retard)
begin
DECLARE @RefTache varchar(50),@RefPhase numeric(4,0),@IDprojet varchar(50),@IDressource varchar(50) @retard bit;
DECLARE TrigTempUpdate_Cursor CURSOR FOR
SELECt RefTache,RefPhase,IDprojet,IDressource,retard
FROM
inserted;
begin
OPEN TrigTempUpdate_Cursor;
FETCH NEXT FROM TrigTempUpdate_Cursor INTO @RefTache, @RefPhase,@IDprojet,@IDressource,@retard
WHILE @@FETCH_STATUS = 0
BEGIN
if @retard=1
--DO QUERY HERE
FETCH NEXT FROM TrigTempUpdate_Cursor INTO @RefTache, @RefPhase,@IDprojet,@IDressource,@retard
END;
end;
CLOSE TrigTempUpdate_Cursor;
DEALLOCATE TrigTempUpdate_Cursor;
end;
end;
我在table中写了更新列(延迟)后执行查询的触发器,但有时更新的行很多如何解决?
CREATE OR ALTER TRIGGER notifRetard
ON Taches
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @value INT
IF UPDATE(retard)
-- How to make this for every row updated???
SELECT
@value = inserted.retard
FROM
inserted;
IF @value = 1
-- run SQL query
END
如果其他人需要,解决方案是使用 CURSOR。
CREATE or alter TRIGGER notifRetard
ON Taches
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE(retard)
begin
DECLARE @RefTache varchar(50),@RefPhase numeric(4,0),@IDprojet varchar(50),@IDressource varchar(50) @retard bit;
DECLARE TrigTempUpdate_Cursor CURSOR FOR
SELECt RefTache,RefPhase,IDprojet,IDressource,retard
FROM
inserted;
begin
OPEN TrigTempUpdate_Cursor;
FETCH NEXT FROM TrigTempUpdate_Cursor INTO @RefTache, @RefPhase,@IDprojet,@IDressource,@retard
WHILE @@FETCH_STATUS = 0
BEGIN
if @retard=1
--DO QUERY HERE
FETCH NEXT FROM TrigTempUpdate_Cursor INTO @RefTache, @RefPhase,@IDprojet,@IDressource,@retard
END;
end;
CLOSE TrigTempUpdate_Cursor;
DEALLOCATE TrigTempUpdate_Cursor;
end;
end;