Создание и изменение ограничений CHECK
Ограничения CHECK можно создавать как часть определения таблицы при ее создании. Если таблица уже существует, можно добавить ограничение CHECK. Таблицы и столбцы могут содержать несколько ограничений CHECK.
Если ограничение CHECK уже существует, его можно изменить или удалить. Например, может возникнуть необходимость изменить выражение, используемое в ограничении CHECK для столбца таблицы.
Примечание |
---|
Чтобы изменить ограничение CHECK, нужно, прежде всего удалить существующее ограничение CHECK и повторно создать его с новым определением. |
В следующем примере Transact-SQL показано создание таблицы и последующее изменение этой таблицы путем добавления ограничения CHECK для столбца CreditRating.
IF OBJECT_ID ('dbo.Vendors', 'U') IS NOT NULL
DROP TABLE dbo.Vendors;
GO
CREATE TABLE dbo.Vendors
(VendorID int PRIMARY KEY, VendorName nvarchar (50),
CreditRating tinyint)
GO
ALTER TABLE dbo.Vendors ADD CONSTRAINT CK_Vendor_CreditRating
CHECK (CreditRating >= 1 AND CreditRating <= 5)
Удалите ограничения CHECK для устранения ограничений на приемлемые значения данных в столбце или столбцах, включенных в выражение ограничения.
Для создания ограничения CHECK в процессе создания таблицы
Для создания ограничения CHECK в существующей таблице
Для удаления ограничения CHECK
Форсирование ограничения CHECK с помощью параметра WITH NOCHECK
При добавлении ограничения CHECK к существующей таблице ограничение CHECK можно применять только к новым данным или к существующим данным. По умолчанию, ограничение CHECK применяется как к существующим данным, так и к новым данным. Параметр WITH NOCHECK инструкции ALTER TABLE используется для применения нового ограничения только к вновь добавляемым данным. Этот параметр полезно использовать в случаях, когда существующие данные уже соответствуют новому ограничению CHECK или когда бизнес-правило требует форсированного применения ограничения, начиная с данного момента.
Например, старое ограничение может предусматривать использование не более чем пятизначных почтовых кодов, а новое ограничение может требовать применения девятизначных почтовых кодов. Старые данные с пятизначными почтовыми кодами все еще действительны и будут сосуществовать с новыми данными, которые содержат девятизначные почтовые коды. Следовательно, проверке на соответствие новому ограничению должны подвергаться только новые данные.
Однако следует проявлять осторожность при добавлении ограничений без проверки существующих данных, поскольку в этом случае не используются средства управления компонентом Database Engine, обеспечивающие соблюдение правил целостности для таблиц.
Для исключения проверки существующих данных при создании ограничения CHECK
Отключение ограничений CHECK
Существует возможность отключения ограничений CHECK при выполнении некоторых операций, таких как операции INSERT, операции UPDATE и операции по обработке репликации.
Инструкции INSERT и UPDATE
Отключение ограничения CHECK позволяет изменять данные в таблице без проверки на предмет соответствия этому ограничению. Отключите ограничение CHECK при выполнении инструкций INSERT и UPDATE, если новые данные будут нарушать это ограничение или если ограничение должно применяться только по отношению к данным, уже внесенным в базу данных.
Обработка репликации
Отключите ограничение CHECK в процессе репликации, если ограничение применимо только к базе данных-источнику. При репликации таблицы определение таблицы и данные копируются из базы данных-источника в целевую базу данных. Как правило, но необязательно, эти две базы данных располагаются на отдельных серверах. Если ограничения CHECK, применимые только к базе данных-источнику, не отключены, они могут создавать ненужные помехи для введения новых сведений в целевую базу данных. Дополнительные сведения см. в разделе Управление ограничениями, идентификаторами и триггерами с помощью параметра «NOT FOR REPLICATION».
Для отключения ограничения CHECK при выполнении инструкций INSERT и UPDATE
Для отключения ограничения CHECK при выполнении репликации
Для получения сведений об ограничениях CHECK