我在表中有一个名为Status
的列,用于更改其值。当Status
更改为“停止”或“完成”时,我需要捕获。然后我将表1中的整行复制到表2.我遇到的问题是:数据库只允许在Status
列而不是整列下只更改一个单元格值。如何将此触发器应用于整个列。谢谢你的回复!
ALTER TRIGGER Name
ON table1
AFTER UPDATE
AS
BEGIN
SET nocount ON
IF EXISTS (Select * FROM table1 Where Status in('Stop','Comp'))
BEGIN
INSERT INTO
Table_2
END
END
答案 0 :(得分:2)
尝试这样的事情:
有:
CREATE TABLE table1 (
id INTEGER,
column1 INTEGER,
STATUS CHAR(10)
);
CREATE TABLE table2 (
id INTEGER,
column1 INTEGER,
STATUS CHAR(10)
);
如果要向table1中插入table1中的旧值,可以执行以下操作:
CREATE TRIGGER triggname AFTER UPDATE ON table1
FOR EACH ROW
BEGIN
IF NEW.STATUS = 'Stop' OR NEW.STATUS = 'Comp' THEN
INSERT INTO table2
VALUES (old.id, old.column1, old.STATUS);
END IF;
END
CREATE TRIGGER TR_status ON table1 AFTER UPDATE AS
BEGIN
INSERT INTO table2
SELECT d.* FROM DELETED d
INNER JOIN INSERTED i ON d.id = i.id
WHERE i.status != d.status AND i.status IN ('Comp','Stop');
END;
在SQL Server中,您必须遍历已插入和已删除的表,这些表表示已更新记录的NEW和OLD版本。 sqlfiddle demo