Проверка целостности SQL Server после включения/выключения identity_insert

Я импортирую данные из устаревшего приложения (php + mysql) в переписанную версию (sql server 2008 и mvc3). В настоящее время я занимаюсь написанием пакета синхронизации/преобразования БД.

Данные mysql имеют первичные ключи, но по какой-то причине не имеют внешних ключей, и поскольку данные по-прежнему являются реляционными (несмотря на отсутствие внешних ключей), мой пакет преобразования использует IDENTITY_INSERT ON / OFF. Поскольку исходные данные не имеют возможности обеспечить целостность данных, я хотел бы выполнить проверку целостности после того, как выполню вставку и выключу IDENTITY_INSERT.

Есть ли хороший способ написать это действие? Предпочтительно на уровне таблицы, а не всей БД?

Спасибо.


person Ales Potocnik Hahonina    schedule 24.10.2011    source источник
comment
Вы можете загрузить данные в промежуточные таблицы. Проверьте и очистите данные, прежде чем перемещать их в живые таблицы, содержащие поля вашей идентификации.   -  person Tony    schedule 24.10.2011
comment
Спасибо Тони. Это тоже хорошая идея. Я просто не хочу все усложнять для тех, кто устанавливает это, поскольку его нужно развернуть на X-м количестве клиентов. Достаточно выполнить проверку целостности и сообщить о найденных несоответствиях. Мне просто нужно знать, как запустить проверку целостности.   -  person Ales Potocnik Hahonina    schedule 27.10.2011


Ответы (1)


Лично я бы определил, какие данные не имеют целостности, прежде чем импортировать в новую схему. Простой запрос WHERE NOT Exists для каждой дочерней таблицы (или того, что должно быть спроектировано как дочерняя таблица) сделает это. Я бы не стал импортировать данные, которые нельзя привязать к родительской записи. Однако я бы создал таблицу исключений и переместил в нее эти записи, чтобы некоторые пользователи увидели, могут ли они выяснить, какими должны быть родительские данные.

person HLGEM    schedule 24.10.2011
comment
Спасибо за конструктивный ответ. Я рассмотрел это, и этот подход будет действителен, если ожидается большое количество несоответствий. Работая с версией приложения для разработки и тестовым набором данных, я не обнаружил никаких проблем с отношениями. Эта проверка целостности была бы просто отказоустойчивой. Честно говоря (можете называть меня ленивым), я не хочу еще больше усложнять ситуацию, добавляя целый новый набор таблиц для ошибок и механизм проверки взаимосвязей во время миграции. Хотя, конечно, буду иметь в виду. - person Ales Potocnik Hahonina; 24.10.2011