【发布时间】: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_MaterialText 和 FK_xx_MaterialData_xxxx_Material 设置为 ON UPDATE CASCADE 和 ON DELETE CASCADE。
也许这是我放置MERGE 语句的顺序的问题?或者你知道可能是什么原因吗?
还有一个问题:当我再次运行脚本时,没有错误。那么只运行两次 scipt 是否可以,或者这会在未来引起问题吗?
【问题讨论】:
-
根据依赖关系对您的
merge语句进行排序。例如根据您的错误消息,cMat_Material应该在JW_MaterialData之后。
标签: sql sql-server merge insert