Я нахожусь в процессе переноса данных из старой базы данных в новую. Структуры таблиц между ними несколько отличаются, но я позаботился о том, чтобы не было серьезных несоответствий типов данных, и в основном процесс работал хорошо.
За прошедшие годы в исходной базе данных (которая имела столбцы идентификаторов с автоматическим приращением) были удалены строки, поэтому при переносе в новую базу данных остались бы только столбцы с автоматически увеличивающимися идентификаторами, что привело бы к серьезным несоответствиям, поэтому я добавил, по крайней мере, в качестве временной меры , столбцы, в которых будут храниться значения старых первичных ключей, чтобы я мог выполнять различные запросы на обновление и перебалансировать данные.
Единственная вещь, которую я по глупости не продумал, может быть, так тщательно, как следовало бы, это вопрос о таблицах, где первичный ключ представлял собой объединение двух полей.
Итак, на мой вопрос.
У меня есть следующий запрос;
UPDATE FishTrackerPro.dbo.LandingDetails
SET LandingId = lh.LandingId
FROM LandingHeaders lh
WHERE LandingDetails.LandingId = lh.OriginalLandingId
Если запустить как есть, произойдет сбой со следующей ошибкой:
Нарушение ограничения PRIMARY KEY «PK_LandingDetails». Не удается вставить повторяющийся ключ в объект «dbo.LandingDetails». Повторяющееся значение ключа (918, 42).
Первичный ключ состоит из полей LandingId и ProductId.
Хорошо, это имеет смысл, но если бы он работал полностью, все нарушения были бы удалены. Итак, есть ли способ запустить этот запрос, говоря компилятору запросов игнорировать любые нарушения и просто завершить его?
ALTER INDEX xxx ON xxx DISABLE
. Никогда не пробовал, может получится. После этого сделайтеALTER INDEX xxx ON xxx REBUILD
. Если это сработает, я опубликую как ответ. ГЛ. - person TT.   schedule 05.01.2016