【问题标题】:Creating a Trigger to delete from table when deleting duplicate rows from another related table从另一个相关表中删除重复行时,创建从表中删除的触发器
【发布时间】:2016-11-17 09:20:56
【问题描述】:

我正在使用 sqlserver,当我从 Xtable 中删除重复行时,我创建了从 YTable 中删除的触发器。 注意:YTable 有一个来自 XTable 的外键作为 On_ID

触发查询

CREATE TRIGGER trgAfterDeletev4 ON XTable

 AFTER DELETE
 AS
 declare @empid int;

 select @empid=d.[On_ID] from deleted d; 

 Delete from YTable
 where [On_ID]= @empid
 PRINT 'AFTER DELETE TRIGGER fired.'

从 XTable 中删除重复行

WITH C AS(
   SELECT  *,
       RN = ROW_NUMBER()OVER(PARTITION BY [col1] ORDER BY [col2])
   FROM [Sourcing].[src].XTable
  )
  DELETE FROM C WHERE RN > 1

结果

(0 行受影响)DELETE TRIGGER 触发后。

(1271060 行受影响)

请问这些查询有什么问题

非常感谢

【问题讨论】:

    标签: sql sql-server tsql database-trigger


    【解决方案1】:

    声明

    select @empid=d.[On_ID] from deleted d
    

    当您从XTable 删除多于一条记录时,将无法正常工作,因为您无法将多个 ID 放入单个整数变量中。

    您可以简单地将触发器中的删除语句更改为

     Delete from YTable
     where [On_ID] in (select [On_ID] from deleted)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多