我正在尝试使用 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";
声明。
任何意见,将不胜感激。