CREATE RULE (Transact-SQL)
Создает объект, называемый правилом. Будучи привязанным к столбцу, имеющему псевдоним типа данных, правило определяет значения, которые могут быть вставлены в этот столбец.
Важно! |
---|
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется. Вместо этой инструкции рекомендуется применять проверку ограничений. Эти ограничения создаются при помощи ключевого слова CHECK инструкции CREATE TABLE или ALTER TABLE. Дополнительные сведения см. в разделе Ограничения CHECK. |
К столбцу, имеющему псевдоним типа данных, можно привязать только одно правило. Однако кроме правила, со столбцом может быть связано одно или несколько ограничений CHECK. Если это так, соблюдаются все ограничивающие условия.
Синтаксис
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 в одном пакете. Правила не распространяются на данные, существовавшие в базе данных на момент создания правил, и не могут быть привязаны к системным типам данных. Дополнительные сведения см. в разделе Типы данных (компонент Database Engine).
Правило может быть создано только в текущей базе данных. После создания правила необходимо выполнить хранимую процедуру 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]'
См. также