触发以捕获列中的特定值

时间:2013-10-17 00:21:57

标签: sql sql-server

我在表中有一个名为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

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

有:

CREATE TABLE table1 (
    id INTEGER, 
    column1 INTEGER, 
    STATUS CHAR(10)
);

CREATE TABLE table2 (
    id INTEGER, 
    column1 INTEGER, 
    STATUS CHAR(10)
);

如果要向table1中插入table1中的旧值,可以执行以下操作:

在mySql

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

sql fiddle demo

在SQL-Server中:

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