TFS - развертывание базы данных - настройка CHECK или NOCHECK для ограничений - PullRequest
3 голосов
/ 19 августа 2011

В настоящее время мы используем Visual Studio 2010 и у нас есть проект базы данных, который содержит все наши объекты базы данных.Обычно мы разворачиваем базу данных через скрипт сборки в наших средах CI, QA и UAT.Для производства мы создаем сценарий и предоставляем его нашему администратору базы данных для развертывания.

Мы заметили, что при развертывании нашей производственной базы данных требуется удалить большое количество ограничений внешнего ключа и воссоздать их с * 1003.* NOCHECK .

Когда мы создаем наши внешние ключи, мы не определяем CHECK или NOCHECK .Ниже приведен пример одного из наших ключей:

ALTER TABLE [dbo].[Table1]
    ADD CONSTRAINT [FK_Table1_Table2_Field1] 
    FOREIGN KEY ([Field1])
    REFERENCES dbo.[Table2] ([Field1])

Когда мы нацеливаем наш проект базы данных на наши среды CI, QA и UAT, он хочет создать ограничение с помощью " CHECK ",Он берет приведенный выше скрипт и пытается развернуть:

ALTER TABLE [dbo].[Table1] WITH CHECK
    ADD CONSTRAINT [FK_Table1_Table2_Field1] 
    FOREIGN KEY ([Field1])
    REFERENCES dbo.[Table2] ([Field1])

Когда мы нацеливаем наш проект базы данных на нашу производственную среду, он хочет создать ограничение с помощью « NOCHECK ».Он берет приведенный выше скрипт и пытается развернуть:

ALTER TABLE [dbo].[Table1] WITH NOCHECK
    ADD CONSTRAINT [FK_Table1_Table2_Field1] 
    FOREIGN KEY ([Field1])
    REFERENCES dbo.[Table2] ([Field1])

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

1 Ответ

0 голосов
/ 24 августа 2011

Ответ на этот вопрос должен вам помочь: С ПРОВЕРКОЙ ДОБАВИТЬ ОГРАНИЧЕНИЕ, а затем ПРОВЕРКА КОНТРОЛЯ против ДОПОЛНИТЕЛЬНОГО ОГРАНИЧЕНИЯ

Похоже, "WITH CHECK" является значением по умолчанию для новых внешних ключей, а "WITH NOCHECK" является значением по умолчанию для повторного включения внешних ключей. Это имеет смысл, если вы каждый раз создаете новую базу данных для CI, QA и UAT и изменяете только производственную базу данных (обычная практика).

...