SQL Server删除触发器

编程入门 行业动态 更新时间:2024-10-27 00:25:41
本文介绍了SQL Server删除触发器-行句柄引用已删除的行或标记为删除的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我在一个表上有一个删除触发器,该触发器用于从另一个数据库中的表中删除条目。

I have a delete trigger on a table which is used to delete entries from a table in an another database.

CREATE TRIGGER [dbo].[Trigger_Contracts_Delete] ON [dbo].[Contracts] AFTER DELETE NOT FOR REPLICATION AS IF @@ROWCOUNT = 0 RETURN DELETE seconddb.dbo.second_table WHERE contractId IN (SELECT d.ContractID FROM deleted d)

当我使用我的应用程序(旧版应用程序不了解其内部信息)删除记录时,出现错误引用了行句柄到已删除的行或标记为要删除的行

When I delete a record using my application (legacy app nothing know about its internals) I get the error "Row handle referred to a deleted row or a row marked for deletion"

但是,当我修改此触发器以添加附加的select语句( SELECT d.ContractID FROM删除之前删除了d )。我没有收到错误消息。添加select语句时,它起作用的原因可能是什么,是否通过在 deleted上发出select来锁定了 deleted表? 会发出

However when I modified this trigger to add an additional select statement (SELECT d.ContractID FROM deleted d) just before delete.. I do not get the error message. What could be the reason for it to work when select statement is added, is it that by issuing select on "deleted" I have locked the "deleted" table ? it be issuing a

CREATE TRIGGER [dbo].[Trigger_Contracts_Delete] ON [dbo].[Contracts] AFTER DELETE NOT FOR REPLICATION AS IF @@ROWCOUNT = 0 RETURN SELECT d.ContractID FROM deleted d; DELETE seconddb.dbo.second_table WHERE contractId IN (SELECT d.ContractID FROM deleted d)

推荐答案

您的表缺少主键! 添加主键,问题将消失。

your table(s) are missing primary keys! add primary keys and the problem will go away.

更多推荐

SQL Server删除触发器

本文发布于:2023-10-24 09:51:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1523628.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:触发器   SQL   Server

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!