2

ユーザーがテーブルに行を挿入したときに実行される単純なトリガーがあります。

一括挿入もあり、挿入順序が重要であるため、トリガー内に保持する方法はありますか?

このようにできますか、それとももっと良い方法がありますか?

ALTER TRIGGER simpleTrigger
ON shop
AFTER INSERT AS

SELECT * INTO #orderedInserted from inserted i ORDER BY i.Emp_Sal

declare @empid int;
    declare @empname varchar(100);
    declare @empsal decimal(10,2);
    declare @audit_action varchar(100);

    select @empid=#orderedInserted.Emp_ID from inserted i;  
    select @empname=#orderedInserted.Emp_Name from inserted i;  
    select @empsal=#orderedInserted.Emp_Sal from inserted i;    
    set @audit_action='Inserted Record -- After Insert Trigger.';

    insert into Employee_Test_Audit
           (Emp_ID,Emp_Name,Emp_Sal,Audit_Action,Audit_Timestamp) 
    values(@empid,@empname,@empsal,@audit_action,getdate());
GO;
4

2 に答える 2

3

このようなもの

ALTER TRIGGER simpleTrigger
ON shop
AFTER INSERT AS

    insert into Employee_Test_Audit
           (Emp_ID,Emp_Name,Emp_Sal,Audit_Action,Audit_Timestamp) 
    select i.Emp_ID, i.Emp_Name, i.Emp_Sal, 'Inserted Record -- After Insert Trigger.', getdate()
    from inserted i
    order by i.Emp_Sal

GO;

ただし、に ID 列がない場合Employee_Test_Audit、ORDER BY は問題ではありません

于 2013-07-02T11:55:06.633 に答える
1

非常に単純です。変数は使用しません。

ALTER TRIGGER simpleTrigger
ON shop
AFTER INSERT AS    
    declare @audit_action varchar(100);
    set @audit_action='Inserted Record -- After Insert Trigger.';

    insert into Employee_Test_Audit
           (Emp_ID,Emp_Name,Emp_Sal,Audit_Action,Audit_Timestamp) 
    SELECT i.Emp_ID, i.Emp_Name, i.Emp_sal, @audit_action, getdate() from inserted i ORDER BY i.Emp_Sal ;
GO;
于 2013-07-02T11:55:30.557 に答える