【问题标题】:MERGE conflict with the FOREIGN KEY constraintMERGE 与 FOREIGN KEY 约束冲突
【发布时间】:2017-12-28 13:10:21
【问题描述】:

我有这个更新脚本,我可以在其中将新数据加载到我的数据库中或更新现有数据。但我得到了这些错误。

The MERGE statement conflicted with the FOREIGN KEY constraint
"FK_xx_MaterialDataxxx_xxxx_MaterialText". 
 The conflict occurred in database "TEST", table "dbo.xx_MaterialData", column 'xxxxxGUID'.

The MERGE statement conflicted with the FOREIGN KEY constraint
"FK_xx_MaterialData_xxxx_Material". The conflict occurred in 
database "TEST", table "dbo.xxxx_Material", column 'xxxxxGUID'.

这是相关的陈述。但是当然还有更多的MERGE 语句和更多的表。

MERGE INTO [dbo].[xx_MaterialDataxxx] ON xxxxxGUID
WHEN MATCHED THEN UPDATE SET 
WHEN NOT MATCHED THEN INSERT 

MERGE INTO [dbo].[xxxx_Material] ON xxxxxGUID
WHEN MATCHED THEN UPDATE SET 
WHEN NOT MATCHED THEN INSERT 

MERGE INTO [dbo].[xx_MaterialData] ON xxxxxGUID
WHEN MATCHED THEN UPDATE SET 
WHEN NOT MATCHED THEN INSERT 

FK_xx_MaterialDataxxx_xxxx_MaterialTextFK_xx_MaterialData_xxxx_Material 设置为 ON UPDATE CASCADEON DELETE CASCADE

也许这是我放置MERGE 语句的顺序的问题?或者你知道可能是什么原因吗?

还有一个问题:当我再次运行脚本时,没有错误。那么只运行两次 scipt 是否可以,或者这会在未来引起问题吗?

【问题讨论】:

  • 根据依赖关系对您的merge 语句进行排序。例如根据您的错误消息,cMat_Material 应该在 JW_MaterialData 之后。

标签: sql sql-server merge insert


【解决方案1】:

有必要通过查看表的依赖关系将MERGE 语句按正确的顺序排列。

  1. xxxx_Material
  2. xx_MaterialData
  3. xx_MaterialDataxxx

【讨论】:

    猜你喜欢
    • 2018-10-12
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 2022-11-10
    • 2023-03-06
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多