0

我正在尝试使用 Microsoft SQL Server 将一些数据从一个数据库迁移到另一个数据库。两个数据库都有一个由外键引用的“属性/位置”类型的表。

不幸的是,即使两个表中引用的实体相同,主键也不同。因此,为了迁移数据,我试图暂时禁用外键约束,适当地插入和更新数据,然后重新启用约束。

但是,我收到以下消息:

ALTER TABLE 语句与 FOREIGN KEY 约束“FK__TwelveCri__Store__114A936A”冲突。冲突发生在数据库“API”、表“dbo.Properties”、列“ID”中。

虽然,我理解抛出错误的一般原因(它没有StoreID在表中的列Reports和 中的ID列之间找到匹配Properties),但我不明白为什么在这种特定情况下会这样做。

BEGIN TRAN
USE API;
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT ALL";

SET IDENTITY_INSERT Midamcorp.TwelveCriticalsReports ON;

INSERT INTO Midamcorp.TwelveCriticalsReports (ID, StoreID, InspectorName, ReportTime, ReportDate, PointsPoss, PointsReceived)
    SELECT 
        id, storeID, inspectorName, reportTIme, reportDate, pointsPoss, pointsReceived
    FROM 
        midAmCorp.dbo.criticalReports;

SET IDENTITY_INSERT Midamcorp.TwelveCriticalsReports OFF;

UPDATE API.Midamcorp.TwelveCriticalsReports 
SET StoreID = 1 
WHERE StoreID = 4;

!--- MORE UPDATE STATEMENTS HERE ---!

USE API

SET IDENTITY_INSERT Midamcorp.SecretShopperReportSummary ON;

INSERT INTO Midamcorp.SecretShopperReportSummary(ID, StoreID, PointsPoss, PointsReceived, DriveTime, CompletedBy, DateOfVisit)
    SELECT 
        id, storeID, pointsPoss, pointsReceived, driveTime, completedBy, dateOfVisit
    FROM 
        midamCorp.dbo.secretShopperReportSummary;

SET IDENTITY_INSERT  Midamcorp.SecretShopperReportSummary OFF;

!--- MORE UPDATE STATEMENTS HERE ---!


USE API

SET IDENTITY_INSERT Midamcorp.SecretShopperReportDetails ON;

INSERT INTO Midamcorp.SecretShopperReportDetails(ID, ReportID, QuestionID)
    SELECT 
        id, reportID, questionID 
    FROM 
        midAmCorp.dbo.secretShopperReportDetails;

SET IDENTITY_INSERT Midamcorp.SecretShopperReportDetails OFF;

SELECT * 
FROM Midamcorp.TwelveCriticalsReports 
WHERE StoreID NOT IN (SELECT StoreID FROM dbo.Properties);

EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL";

COMMIT TRAN;

接近结尾的SELECT语句不返回任何结果,如果关系得到正确更新,这是我所期望的。但是,我仍然收到上述错误消息,大概来自EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL";声明。

任何意见,将不胜感激。

4

0 回答 0