Пожалуйста, объясните синтаксис, который SQLServer использует для создания проверочного ограничения - PullRequest
3 голосов
/ 15 ноября 2010

Когда я щелкаю правой кнопкой мыши ограничение по умолчанию и я запрашиваю SQL Server для его создания сценарий CREATE, он генерирует следующий код:

ALTER TABLE [dbo].[tblEventTurnJudgeStartValues]  WITH NOCHECK ADD  CONSTRAINT [tblEventTurnJudgeStartValues_ExecutionToggle] CHECK  (([ExecutionToggle]=(1) OR [ExecutionToggle]=(0) OR [ExecutionToggle]=(-1)))
GO
ALTER TABLE [dbo].[tblEventTurnJudgeStartValues] CHECK CONSTRAINT [tblEventTurnJudgeStartValues_ExecutionToggle]

Для записи я понимаю первый оператор ALTER, ноЯ не понимаю, что делает второе утверждение alter.Пытался отыскать фразу "CHECK CONSTRAINT", но получил только совпадения по синтаксису добавления ограничений.

Спасибо.

Сет

обновление
Спасибо Джо за ваш ответ.Нашел эту ссылку, которая помогает.

http://blog.sqlauthority.com/2009/11/12/sql-server-disable-check-constraint-enable-check-constraint/

Я не знал, что вы могли бы включать и отключать ограничения.Круто!

Сет

1 Ответ

3 голосов
/ 15 ноября 2010

Первый оператор создает ограничение, но поскольку он создается с помощью NOCHECK, существующие данные не проверяются во время создания.

Второе утверждение просто включает ограничение и является технически избыточным.

Лично я предпочел бы, чтобы второе утверждение было записано с опцией WITH CHECK, которая проверит все существующие данные на соответствие ограничению и предотвратит ограничение ненадежным .

ALTER TABLE [dbo].[tblEventTurnJudgeStartValues] WITH CHECK CHECK CONSTRAINT [tblEventTurnJudgeStartValues_ExecutionToggle]
...