CREATE RULE (Transact-SQL)

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

Важное примечаниеВажно!

В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо этой инструкции рекомендуется применять проверку ограничений.Эти ограничения создаются при помощи ключевого слова CHECK инструкции CREATE TABLE или ALTER TABLE.Дополнительные сведения см. в разделе Ограничения уникальности и проверочные ограничения.

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

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Значок ссылки на раздел Cинтаксические обозначения в Transact-SQL

Синтаксис

CREATE RULE [ schema_name . ] rule_name 
AS condition_expression
[ ; ]

Аргументы

  • schema_name
    Имя схемы, к которой относится правило.

  • rule_name
    Имя нового правила. Имена правил должны соответствовать требованиям, предъявляемым к идентификаторам. Указывать имя владельца правила необязательно.

  • condition_expression
    Условие или условия, определяющие правило. Правило может быть любым выражением, допустимым в предложении WHERE, и может включать такие элементы, как арифметические операторы, операторы отношений и предикаты (например IN, LIKE и BETWEEN). Правило не может ссылаться на столбцы или другие объекты базы данных. В правило могут входить встроенные функции, не ссылающиеся на объекты базы данных. Определяемые пользователем функции использовать в правилах нельзя.

    Аргумент condition_expression включает одну переменную. Каждой локальной переменной предшествует знак @. Выражение соответствует значению, введенному при помощи инструкции UPDATE или INSERT. Для представления значения при создании правила можно использовать любое имя или символ, но первым знаком должен быть знак @.

    Примечание

    Не следует создавать правила с выражениями, в которых используются псевдонимы типа данных.Хотя создание таких правил и возможно, но после привязки правил к столбцам или псевдониму типа данных эти выражения компилироваться не будут.

Замечания

Инструкцию CREATE RULE нельзя объединять с другими инструкциями Transact-SQL в одном пакете. Правила не распространяются на данные, существовавшие в базе данных на момент создания правил, и не могут быть привязаны к системным типам данных.

Правило может быть создано только в текущей базе данных. После создания правила необходимо выполнить хранимую процедуру sp_bindrule для привязки правила к столбцу или псевдониму типа данных. Правило должно быть совместимо с типом столбца. Например, правило «@value LIKE A%» не может быть привязано к численному столбцу. Правило может быть привязано к text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, определяемому пользователем типу данных CLR или столбцу timestamp. Правило не может быть привязано к вычисляемому столбцу.

Символьные константы и константы-даты следует заключать в одиночные кавычки ('), а двоичные константы — предварять знаками 0x. Если правило несовместимо со столбцом, к которому оно привязано, компонент Компонент SQL Server Database Engine возвращает сообщение об ошибке при попытке вставки значения в столбец, но не во время привязки правила.

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

Для получения отчета о правиле следует использовать хранимую процедуру sp_help. Для отображения текста правила необходимо выполнить процедуру sp_helptext, передав ей в качестве параметра имя правила. Для переименования правила следует использовать хранимую процедуру sp_rename.

Перед созданием нового правила с именем уже существующего старое правило нужно сбросить при помощи инструкции DROP RULE, а перед сбрасыванием правила нужно отменить его привязку при помощи хранимой процедуры sp_unbindrule. Для отмены привязки правила к столбцу следует использовать процедуру sp_unbindrule.

Можно привязать к столбцу или типу данных новое правило без отмены привязки предыдущего правила; в этом случае старое правило будет переопределено новым. Правила, привязанные к столбцам, всегда имеют больший приоритет, чем правила, привязанные к псевдонимам типа данных. Привязка правила к столбцу приводит к замене правила, уже привязанного к псевдониму типа данных, соответствующему данному столбцу. Однако привязка правила к типу данных не заменяет правило, привязанное к столбцу, имеющему этот псевдоним типа данных. Следствия привязки правил к столбцам и псевдонимам типа данных, к которым уже привязаны правила, поясняет следующая таблица:

Сущность, к которой привязывается новое правило

Старое правило привязано к

псевдоним типа данных.

Старое правило привязано к

Столбец

Псевдоним типа данных

Старое правило заменяется.

Изменений нет

Столбец

Старое правило заменяется.

Старое правило заменяется.

Если столбец имеет и значение по умолчанию и привязанное к нему правило, значение по умолчанию должно попадать в диапазон, определяемый правилом. Значение по умолчанию, конфликтующее с правилом, никогда не вставляется в столбец. При попытке вставить в столбец такое значение по умолчанию ядро СУБД SQL Server формирует сообщение об ошибке.

Разрешения

Для выполнения инструкции CREATE RULE необходимо как минимум разрешение CREATE RULE, связанное с текущей базой данных, и разрешение ALTER, связанное со схемой, в которой создается правило.

Примеры

А.Создание правила с диапазоном

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

CREATE RULE range_rule
AS 
@range>= $1000 AND @range <$20000;

Б.Создание правила со списком

Следующий код создает правило, ограничивающее значения, вставляемые в столбец или столбцы (к которым привязано данное правило) только теми значениями, которые указаны в правиле.

CREATE RULE list_rule
AS 
@list IN ('1389', '0736', '0877');

В.Создание правила с шаблоном

Следующий код создает правило, позволяющее вставлять в столбец только значения, начинающиеся на два любых символа, за которыми следуют дефис (-), любое число символов или не следует никаких символов, и завершающиеся целым числом из диапазона 0—9.

CREATE RULE pattern_rule 
AS
@value LIKE '__-%[0-9]'

См. также

Справочник

ALTER TABLE (Transact-SQL)

CREATE DEFAULT (Transact-SQL)

CREATE TABLE (SQL Server)

DROP DEFAULT (Transact-SQL)

DROP RULE (Transact-SQL)

Выражения (Transact-SQL)

sp_bindrule (Transact-SQL)

sp_help (Transact-SQL)

sp_helptext (Transact-SQL)

sp_rename (Transact-SQL)

sp_unbindrule (Transact-SQL)

Предложение WHERE (Transact-SQL)