1

我有一个在表中调用的列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
4

1 回答 1

2

尝试这样的事情:

有:

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

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

如果要将 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 服务器中:

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 中,您必须检查表 Inserted 和 Deleted,它们代表更新的记录的 NEW 和 OLD 版本。 sqlfiddle demo

于 2013-10-17T01:20:26.073 回答