使用缓存中的表删除,插入,更新?

时间:2014-07-29 11:41:25

标签: sql-server stored-procedures

我有一个存储过程,它为几个表运行几个删除,插入和更新。

我的问题:该程序导致违反主要约束。

示例:

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

据我了解,这些封闭的陈述在提交任何内容之前作为一个重要的陈述运行。

此致

2 个答案:

答案 0 :(得分:2)

您有两种选择:

  1. 以正确方式执行查询,以便服务器能够正确执行它们。
  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