Microsoft SQL Server を使用して、あるデータベースから別のデータベースにデータを移行しようとしています。どちらのデータベースにも、外部キーによって参照される「プロパティ/場所」タイプのテーブルがあります。
残念ながら、2 つのテーブルで参照されているエンティティは同じですが、主キーは同じではありません。そのため、データを移行するために、外部キー制約を一時的に無効にし、データを適切に挿入および更新してから、制約を再度有効にしようとしています。
ただし、次のメッセージが表示されます。
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";
ただし、おそらくステートメントから、上記のエラー メッセージがまだ表示されます。
アドバイスをいただければ幸いです。