SQL Server - Изменить таблицу FOREIGN KEY Conflict при использовании EXEC sp_msforeachtable
Я пытаюсь перенести некоторые данные из одной базы данных в другую, используя 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";
заявление.
Любой совет будет принят во внимание.