2012-05-28 4 views
2

Я сравнивал базы данных с помощью инструмента сравнения сравнений vs 2010, и он генерировал некоторые вещи, которые не ясны. Например, в конце сценария он имеет следующее заявление:SQL-сервер: что означает этот оператор sql?

ALTER TABLE [dbo].[My_table] WITH CHECK CHECK CONSTRAINT [FK_FOREIGN_ID]; 

Может кто-нибудь объяснить, что это значит?

ответ

3

Это означает, что существующие данные должны быть проверены на ограничение при его добавлении.

Неисправность CHECK CHECK оставляет ваши ограничения untrusted, и они не могут использоваться оптимизатором запросов.

1

Это говорит SQL Server, чтобы проверить ограничение на новые строки. Примером встречного примера будет использование WITH NOCHECK для временного отключения проверок проверки новых строк.

ALTER TABLE (Transact-SQL) (WITH CHECK | WITH NOCHECK)

+0

Синтаксис является '[С {Проверяем | NOCHECK}] {ПРОВЕРИТЬ | NOCHECK} CONSTRAINT'. Ваш ответ объясняет одну половину. Мой другой! –

+0

@MartinSmith - Я полагаю, что единственное, что не имеет в виду BOL, явно упоминает, что ограничения ненадежны. Он говорит об этом, но в подробном виде: * Любые нарушения ограничений, которые подавляются WITH NOCHECK при добавлении ограничения, могут привести к сбою будущих обновлений, если они обновляют строки данными, которые не соответствуют ограничениям. * То есть, не доверяют , – Thomas