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,示例如下。