Ограничение уникальности первичного ключа отключается после импорта в Azure SQL - PullRequest
0 голосов
/ 04 марта 2020

Много месяцев go мы работали на нашем веб-сайте (ASP. NET C#) локально и решили перенести наш веб-сайт и базу данных в azure (WebApp и Azure SQL). ). Все было успешно перенесено, и мы столкнулись с минимальными проблемами. Теперь мы только что заметили, что кажется, что во время нашего импорта нашей SQL базы данных в Azure SQL она отключила все ограничения, включая ограничения PK и уникальные ограничения, и т. Д. c. Мне было интересно, сталкивался ли кто-нибудь с этим раньше и что можно сделать, чтобы решить проблему?

Идея, с которой я сейчас работаю, и не уверен, сработает ли она, заключается в том, чтобы экспортировать базу данных из Azure SQL с использованием SqlPackage.exe и VerifyExtraction = false и, надеюсь, это будет работать, потому что в противном случае экспорт не будет работать, поскольку он пытается проверить схему, а затем импортировать это к моему локальному SQL серверу, попробуйте запустить EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" (я считаю, sp_msforeachtable недоступен в Azure SQL). И если это сработает, и ограничения будут снова правильно включены, попробуйте снова импортировать их в Azure SQL, при условии, что они не будут пытаться отключить их снова.

Любая помощь или идеи приветствуются !

Example of the disabled primary key constraint

1 Ответ

1 голос
/ 04 марта 2020

"Все успешно перенесено, и мы столкнулись с минимальными проблемами."

Я сомневаюсь, что это действительно так. Похоже, что при импорте не удалось добавить первичные ключи и ограничения во время восстановления базы данных, что на самом деле довольно сложно.

Если ваша база данных небольшая (всего менее 10 миллионов строк во всех таблицах), вы могли бы закодируйте скрипт для добавления первичных ключей и кластерных индексов на месте, используя инструкцию ALTER TABLE.

Если ваша база данных больше этой, вам нужно либо повторно импортировать ее с нуля, обращая внимание на этот раз в любые журналы ошибок или создайте новые таблицы, выделите в них все свои данные, удалите существующие таблицы и переименуйте новые таблицы в имена, названные старыми.

Я думаю, все зависит от того, сколько таблицы, которые у вас есть, и сколько у них строк, какой подход вам подходит.

В SSMS есть несколько отличных инструментов и ярлыков для выполнения подобных задач. Щелкните правой кнопкой мыши по таблице, нажмите «Сценарий как», нажмите «Создать в», нажмите «Новое окно запроса» и вуаля, у вас есть готовый оператор создания таблицы, готовый к go. Добавьте к нему свои ограничения, переименуйте его в [Tablename] 2, запустите и вуаля! Вы только что создали новую таблицу с ограничением первичного ключа. Выделите все из существующей таблицы в вашу новую таблицу, удалите старую таблицу, переименуйте вашу новую таблицу обратно в прежнее имя, и bam, все готово.

Если вам нужно это сделать 20 раз, ничего страшного. Если вам нужно сделать это 2000 раз, вы можете записать эти операции в один длинный запрос.

...