sql-server - 为插入/更新创建单个触发器

标签 sql-server sql-server-2008

我正在使用 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/

相关文章:

sql 复杂的行到列的转换

sql-server - 主键列上的非聚集索引?

sql - 如何从Sql Server表中获取列名和其他信息?

java - 阿拉伯文本在 web 应用程序中显示,无需更改数据库

sql-server - Mssql 登录失败 ECONNREFUSED 127.0.0.1 :1433

sql - 如何将所有包含用户、架构和角色的数据库从一台服务器移动/复制到另一台服务器

sql-server - 主键的二进制数据类型与 Int?

sql - 从无限的层次结构中选择 child

sql-server - 如何使用 ADF 将数据从本地数据库迁移到 Azure 托管数据库?

sql-server - 使用 "WHERE A=1 OR A=2 clause"SELECT 查询糟糕的执行计划