Поделиться через


CREATE RULE (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure платформенная система аналитики (PDW)

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

Внимание

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

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

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 возвращает сообщение об ошибке при попытке вставки значения в столбец, но не во время привязки правила.

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

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

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

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

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

псевдоним типа данных
Старое правило привязано к

Column
Псевдоним типа данных Старое правило заменяется Без изменений
Column Старое правило заменяется Старое правило заменяется

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

Разрешения

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

Примеры

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

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

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

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

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

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

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

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

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)