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)