sql - 更新触发器如何删除旧记录

标签 sql sql-server sql-server-2008 triggers

我在表 A 上创建了插入触发器,只要表 A 上发生插入,它就会在表 B 中插入记录。这工作正常,但如果我在表 A 上使用更新触发器,它会在表 B 中插入更新的记录,但不会删除旧的记录表B中的记录。如何达到预期的结果?

ALTER TRIGGER trigger1 on tableA
FOR UPDATE

AS 
BEGIN

IF NOT EXISTS (SELECT C.column1 FROM  tableB C INNER JOIN INSERTED I ON C.column1 = I.column1 WHERE  C.column1 = I.column1 AND C.column2 = I.column2 )
 INSERT INTO tableB ( column1 , column2 )
    SELECT column1 , column2 
    FROM INSERTED I
    WHERE RecordTypeId IS NOT NULL
    GROUP BY column1 , column2 
    ORDER BY column1 , column2 

END

最佳答案

请检查以下SQL Server Update trigger它使用内部已删除

从目标表中删除
create TRIGGER trigger1 on tableA
FOR UPDATE

AS 
BEGIN

 DELETE tableB
 FROM tableB b
 INNER JOIN deleted d
    on b.column1 = d.column1
    and b.column2 = d.column2 


 INSERT INTO tableB ( column1 , column2 )
    SELECT column1 , column2 
    FROM INSERTED

请在使用生产力之前进行测试。

关于sql - 更新触发器如何删除旧记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37747153/

相关文章:

php - 简单的mysql查询只返回一行

python - 从 mssql 连接获取受影响的行数

.net - 在 SQL 或文件系统中将文档另存为 BLOB

sql-server - SQL Server : sys. master_files 与 sys.database_files

sql - 根据员工类型计算总工资

c# - 在 linq to sql 中将图像存储在数据库中的最佳方法

MySQL 重复键更新从查询中添加值

php - 数据库选择和查询问题 - PHP

MySQL - 将 LEFT JOIN 替换为 NOT IN

sql - 在同一个表中加入查询