我正在使用 SQL Server 2008。
假设我有表 A,它是一个事务表。表 B 是一个历史表。
每当在表 A 中插入或更新一行时,都应在表 B 中插入一个新行。
表 B 的 Status 列应分别更改为 INSERTED 或 UPDATED。
如何通过单个触发器处理此问题?
最佳答案
你的要求很简单:
CREATE TRIGGER TR_TableA_IU ON dbo.TableA FOR INSERT, UPDATE
AS
SET NOCOUNT ON;
INSERT dbo.TableB (Column1, Column2, Status)
SELECT
I.Column1,
I.Column2,
CASE WHEN EXISTS (SELECT * FROM Deleted) THEN 'UPDATED' ELSE 'INSERTED' END
FROM Inserted I;
如果您还想处理删除,那也可以在一条语句中完成:
CREATE TRIGGER TR_TableA_IUD ON dbo.TableA FOR INSERT, UPDATE, DELETE
AS
SET NOCOUNT ON;
INSERT dbo.TableB (Column1, Column2, Status)
SELECT
I.Column1,
I.Column2,
CASE WHEN EXISTS (SELECT * FROM Deleted) THEN 'UPDATED' ELSE 'INSERTED' END
FROM
Inserted I
UNION ALL
SELECT
D.Column1,
D.Column2,
'DELETED'
FROM Deleted D
WHERE NOT EXISTS (
SELECT * FROM Inserted
);
哇,到目前为止给出了很多完全错误和半错误(至少过于复杂)的答案。
关于sql-server - 为插入/更新创建单个触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21897369/