一尘不染

SQL触发器无法执行INSTEAD OF DELETE,但对于ntext,image列是必需的

sql

CREATE TRIGGER [dbo].[C1_Deletions] ON [dbo].[C1] INSTEAD OF DELETE AS
SET NOCOUNT ON
  IF EXISTS ( SELECT 'True' FROM deleted JOIN C1 ON deleted.ACCOUNTNO = C1.ACCOUNTNO )
   BEGIN
    INSERT INTO [GDeletions].[dbo].[C1] SELECT * FROM deleted
    DELETE C1 FROM C1 INNER JOIN DELETED ON C1.ACCOUNTNO = DELETED.ACCOUNTNO
   END

所以这是我要使用的触发器,当我按accountno删除时,它工作得很好,但是当我需要按recid(另一列)删除时,我无法使用。

如果我将INSTEAD
OF更改为AFTER,则会收到有关ntext的错误,不允许使用图像列。有什么办法可以解决这个问题?我不能是一个指定删除字符串的人,程序本身做到了,我只需要触发器即可获取要删除的数据。

我遇到的最大问题是另一个存储历史记录的表,它使用与C1表匹配的accountno来存储历史记录,但是还有一个Recid,它对于每个条目都是唯一的。如果我要删除一个C1条目,它会使用accountno从历史记录中删除所有内容,但是如果我删除一个历史记录条目,则它将按recid删除。


阅读 197

收藏
2021-03-17

共1个答案

一尘不染

我发现,即使您一次删除多行,在查询执行期间每一行仍会被放入DELETED临时表中,因此我的触发器然后遍历每条记录并匹配recid(这对每一行都是唯一的),并且从那里删除/移动。

2021-03-17