Pin*_*inu 9 sql-server datatrigger
我有一张桌子Product和另一张桌子ProductLog.
日志表需要跟踪表中的两列Product.每次在这些列上都有插入,更新或删除时,我需要更新日志表.
我是否需要编写三个单独的触发器,或者一个触发器可以处理这些操作?
我还需要知道操作的类型,例如,我需要知道日志表中的条目是否是因为插入或删除或更新.如果有人给我一个很好的例子.
a1e*_*x07 24
你只需要一个触发器
CREATE TRIGGER [ProductAfter] ON [Product] AFTER INSERT, UPDATE, DELETE
Run Code Online (Sandbox Code Playgroud)
您可以根据触发器主体中可用的记录数inserted和deleted表中的数量来确定触发触发器的DML语句.对于INSERT,deleted是空的,对DELETE,inserted是空的,对UPDATE双方inserted和deleted不为空.例如,
IF @@ROWCOUNT = 0 -- exit trigger when zero records affected
BEGIN
RETURN;
END;
DECLARE @type CHAR(1);-- 'U' for update, 'D' for delete, 'I' for insert
IF EXISTS(SELECT * FROM inserted)
BEGIN
IF EXISTS(SELECT * FROM deleted)
BEGIN
SET @type ='U';
END
ELSE
BEGIN
SET @type ='I';
END
END
ELSE
BEGIN
SET @type = 'D';
END;
Run Code Online (Sandbox Code Playgroud)
此外,看看跟踪数据更改,还有另一个选项,用于跟踪没有触发器的更改.
小智 8
要不就
DECLARE @type CHAR(1)=
case when not exists(SELECT * FROM inserted)
then 'D'
when exists(SELECT * FROM deleted)
then 'U'
else
'I'
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19525 次 |
| 最近记录: |