CREATE RULE (Transact-SQL)

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

ms188064.note(ru-ru,SQL.90).gifВажно!
Инструкция CREATE RULE будет удалена из будущей версии Microsoft SQL Server. Не следует использовать ее при создании новых приложений, и рекомендуется запланировать изменение тех приложений, в которых она используется. Вместо этой инструкции рекомендуется применять ограничения CHECK. Эти ограничения создаются при помощи ключевого слова CHECK инструкции CREATE TABLE или ALTER TABLE. Дополнительные сведения см. в разделе Ограничения CHECK.

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

Значок ссылки на разделСоглашения о синтаксисе в 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. Для представления значения при создании правила можно использовать любое имя или символ, но первым знаком должен быть знак @.

    ms188064.note(ru-ru,SQL.90).gifПримечание.
    Не следует создавать правила с выражениями, в которых используются типы данных псевдонима. Хотя создание таких правил и возможно, но после привязки правил к столбцам или типам данных псевдонима эти выражения компилироваться не будут.

Замечания

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

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

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

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

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

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

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

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

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

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

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

Столбец

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

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

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

ms188064.note(ru-ru,SQL.90).gifПримечание.
Значение уровня совместимости определяет, как ядро СУБД будет интерпретировать пустую строку: как одиночный пробел или как настоящую пустую строку. Если уровень совместимости не превышает 65, ядро СУБД интерпретирует пустые строки как одиночные пробелы. Если уровень совместимости равен 70, ядро СУБД интерпретирует пустые строки как пустые строки. Дополнительные сведения см. в разделе sp_dbcmptlevel (Transact-SQL).

Разрешения

Для выполнения инструкции 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');

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

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

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

См. также

Справочник

ALTER TABLE (Transact-SQL)
CREATE DEFAULT (Transact-SQL)
CREATE TABLE (Transact-SQL)
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)

Другие ресурсы

Пакеты
Использование идентификаторов в качестве имен объектов

Справка и поддержка

Получение помощи по SQL Server 2005