Sql server 是否使用缓存中的表删除、插入、更新?

Sql server 是否使用缓存中的表删除、插入、更新?,sql-server,stored-procedures,Sql Server,Stored Procedures,我有一个存储过程,它对几个表运行几次删除、插入和更新 我的问题:该过程会导致违反关键点约束 例如: DELETE FROM tableA WHERE key='1' DELETE FROM tableB WHERE key='1' 表B有一个表a的外键引用,过程停止,我得到一条错误消息。所有更改都将被放弃 我的问题:如何告诉过程或服务器表A中的条目已被删除?我可以使用缓存中的表A进行外键引用比较吗 我使用microsoft sql server 编辑 对不起,我把时间顺序弄混了。 事实上,表A

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

我的问题:该过程会导致违反关键点约束

例如:

DELETE FROM tableA WHERE key='1'
DELETE FROM tableB WHERE key='1'
表B有一个表a的外键引用,过程停止,我得到一条错误消息。所有更改都将被放弃

我的问题:如何告诉过程或服务器表A中的条目已被删除?我可以使用缓存中的表A进行外键引用比较吗

我使用microsoft sql server

编辑

对不起,我把时间顺序弄混了。 事实上,表A有FK,它的条目是第一个被删除的条目。 随后是表B,未提及表A。 然而,我得到了一条“与引用约束冲突”的消息。 对此错误消息的唯一解释是,表A上的删除未提交

编辑 我可能发现了问题。我所有的delete语句都包含在BEGIN/END中

因此,我:

BEGIN
  DELETE FROM tableA WHERE key='1'
  DELETE FROM tableB WHERE key='1'
END
据我所知,在提交任何内容之前,这些附带的语句都作为一个大语句运行

关于

您有两个选择:

  • 以正确的方式执行查询,以便服务器能够正确执行查询
  • 您可以在执行过程期间删除这些表的外键

  • 如果
    TABLEB
    具有来自
    TABLEA
    的FK,则必须首先从
    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
    

    @你是说正确的顺序吗?它们的顺序是正确的。我不应该得到一个错误消息吗?他的意思是你必须先删除带有外键引用的表(tableB),然后删除tableA。切换语句。或者第三个选项,使用级联创建FK,示例如下。