SQL-记录更新和插入的记录

时间:2018-09-21 10:34:19

标签: sql-server tsql

希望审核已更新和插入的行。

运行脚本时,是否可以捕获'(x个受影响的行)'等

例如

INSERT INTO test_table (name, age)
VALUES ('Patrick', 22);

UPDATE test_table
SET age = 33
WHERE name = 'Patrick' 

'(1 row(s) affected)'

然后将其插入审核表。 XXX是“((受影响的1行))”。

INSERT INTO audit_table (table_used, records_changed)
VALUES ('test_table', XXX);

2 个答案:

答案 0 :(得分:0)

@@ROWCOUNT

DECLARE @RowCount1 INT;

INSERT INTO test_table (name, age)
VALUES ('Patrick', 22);

UPDATE test_table
SET age = 33
WHERE name = 'Patrick' 

SELECT @RowCount1 = @@ROWCOUNT

INSERT INTO audit_table (table_used, records_changed)
VALUES ('test_table', @RowCount1);

答案 1 :(得分:-1)

或者,您可以使用触发器查看更改的行。

CREATE TRIGGER test_table_aut
 AFTER 
 UPDATE 
 ON test_table
 REFERENCING OLD AS OLD NEW AS NEW
 FOR EACH ROW
DECLARE
  d_user_id NUMBER(8) := FND_GLOBAL.USER_ID;
  d_date    DATE      := SYSDATE;
  d_error    VARCHAR2(2000);
BEGIN

  INSERT INTO audit_table (
    updated_by,
    update_date,
    old_name,
    old_age              
    new_name,
    new_age
    )
  VALUES (
    d_user_id,
    d_date,
    :OLD.name,
    :OLD.age,
    :NEW.name
    :NEW.age
);

  EXCEPTION WHEN OTHERS THEN
    d_error := SQLERRM;
    INSERT INTO xx_error VALUES('test_table_aut '||d_error);
END;
/

因此您可以获得以下输出。

output