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"; заявление.

Любой совет будет принят во внимание.

0 ответов

Другие вопросы по тегам