Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiNovye.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.92 Mб
Скачать

Ограничение check

Ограничение CHECK используется, чтобы ограничить множество допустимых для колонки значений определёнными значениями. Значения, которые используются при вставке в колонку или обновлении колонки, проверяются на истинность (значение TRUE) указанного в ограничении булева условия поиска. Например, если нужно ограничить диапазон возможных значений, допустимых для колонки price таблицы items, величинами от $0,01 до $500,00, то следует использовать следующий оператор:

CREATE TABLE items

(

item_name char(15) NOT NULL,

item_id smallint NOT NULL IDENTITY(1,1),

price smallmoney NULL,

item_desc varchar(30) NOT NULL DEFAULT 'none',

CONSTRAINT PK_item_id PRIMARY KEY (item_id),

CONSTRAINT CK_price CHECK (price >= .01 AND

price <= 500.00)

)

GO

Отметим, что разрешено использование значений NULL в колонке price и задано ограничение CHECK по этой колонке. Поскольку SQL Server может отличить null-значение от любого другого типа значений, в колонке price, несмотря на ограничение CHECK, разрешены значения NULL. Кроме того, отметим, что этому ограничению присвоено имя CK_price. Присваивание имени ограничению упрощает последующее удаление и повторное создание этого ограничения по имени с помощью T-SQL. Например, чтобы изменить множество допустимых значений на диапазон от $1,00 до $1000,00, используется следующий оператор:

ALTER TABLE items

DROP CONSTRAINT CK_price

GO

ALTER TABLE items

ADD CONSTRAINT CK_price CHECK (price >= 1.00 AND price <= 1000.00)

GO

Второй оператор ALTER TABLE имел бы такой же вид, в случае добавления этого ограничения к существующей таблице items в первый раз. При добавлении ограничения CHECK к существующей таблице применяются те же правила, что и при добавлении ограничения FOREIGN KEY. Существующие строки будут проверяться на соответствие этому ограничению. Если не все строки дают при проверке значение TRUE, то ограничение не добавляется к таблице и SQL Server возвращает сообщение об ошибке, информирующее, что оператор ALTER TABLE создаёт конфликтную ситуацию из-за ограничения CHECK. Если добавление этого ограничения необходимо, используется опция WITH NOCHECK, чтобы указать, что должны проверяться только последующие обновления и добавляемые строки, но не существующие строки.

Вот пример использования WITH NOCHECK при добавлении ограничения CK_price:

ALTER TABLE items

WITH NOCHECK ADD CONSTRAINT CK_price

CHECK (price >= 1.00 AND price <= 1000.00)

GO

Возможно активизировать и отключать ограничение CHECK (как и ограничение FOREIGN KEY) с помощью ключевых слов CHECK и NOCHECK, используемых с командой ALTER TABLE. Вам может потребоваться этот метод, например, для вставки цены, выходящей за указанный диапазон. В следующем примере выполняется отключение и последующая повторная активизация ограничения CHECK с именем CK_price:

ALTER TABLE items

NOCHECK CONSTRAINT CK_price --Отключает ограничение

GO

--Здесь должен быть оператор INSERT

GO

ALTER TABLE items

CHECK CONSTRAINT CK_price --Повторно активизирует ограничение

GO

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]