我有一个存储过程,它为几个表运行几个删除,插入和更新。
我的问题:该程序导致违反主要约束。
示例:
DELETE FROM tableA WHERE key='1'
DELETE FROM tableB WHERE key='1'
表B有一个对表A的外键引用,该过程停止,我收到一条错误消息。所有更改都将被丢弃。
我的问题:如何告诉程序或服务器表A中的条目已被删除?我可以使用缓存中的表A进行外键引用比较吗?
我使用的是microsoft sql server。
修改的
对不起,我按时间顺序混合了。 实际上,表A具有FK,其条目是第一个要删除的条目。 之后的表B没有参考表A. 然而,我得到了一个与REFERENCE约束相冲突的"信息。 我对此错误消息的唯一解释是,表A上的删除未提交。
修改的 我可能已经发现了这个问题。我的所有删除语句都包含在BEGIN / END中。
所以我有:
BEGIN
DELETE FROM tableA WHERE key='1'
DELETE FROM tableB WHERE key='1'
END
据我了解,这些封闭的陈述在提交任何内容之前作为一个重要的陈述运行。
此致
答案 0 :(得分:2)
您有两种选择:
答案 1 :(得分:0)
如果TABLEB
的FK来自TABLEA
,那么您必须先从TABLEB
中删除:
DELETE FROM tableB WHERE key='1' --Doing this will remove the row that references TABLEA
DELETE FROM tableA WHERE key='1' --TABLEA can be deleted because there are no references to the row in the other TABLE