Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureСистема платформы аналитики (PDW)
База данных SQL в Microsoft Fabric
Создает объект, называемый правилом. Будучи привязанным к столбцу, имеющему псевдоним типа данных, правило определяет значения, которые могут быть вставлены в этот столбец.
Внимание
Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо этого рекомендуется использовать ограничения проверки. Эти ограничения создаются при помощи ключевого слова CHECK инструкции CREATE TABLE или ALTER TABLE. Дополнительные сведения см. в статье Ограничения уникальности и проверочные ограничения.
К столбцу, имеющему псевдоним типа данных, можно привязать только одно правило. Однако, кроме правила, со столбцом может быть связано одно или несколько ограничений 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. Для представления значения при создании правила можно использовать любое имя или символ, но первым знаком должен быть знак @.
Примечание.
Не следует создавать правила с выражениями, в которых используются псевдонимы типа данных. Хотя создание таких правил и возможно, но после привязки правил к столбцам или псевдониму типа данных эти выражения компилироваться не будут.
Замечания
Инструкцию CREATE RULE нельзя объединять в одном пакете с другими инструкциями Transact-SQL. Правила не распространяются на данные, существовавшие в базе данных на момент создания правил, и не могут быть привязаны к системным типам данных.
Правило может быть создано только в текущей базе данных. После создания правила необходимо выполнить хранимую процедуру sp_bindrule для привязки правила к столбцу или псевдониму типа данных. Правило должно быть совместимо с типом столбца. Например, "@value LIKE A%" нельзя использовать как правило для числового столбца. Правило не может быть привязано к тексту, ntext, image, varchar(max),nvarchar(max), varbinary(max), xml, clR определяемого пользователем типу или столбцу метки времени. Правило не может быть привязано к вычисляемому столбцу.
Символьные константы и константы-даты следует заключать в одиночные кавычки ('), а двоичные константы — предварять знаками 0x. Если правило несовместимо со столбцом, к которому оно привязано, ядро СУБД SQL Server возвращает сообщение об ошибке при попытке вставки значения в столбец, но не во время привязки правила.
Правило, привязанное к псевдониму типа данных, активируется только при попытке вставить значение в столбец типа данных псевдонима или обновить такой столбец. Переменные в правилах не проверяются, поэтому не следует присваивать переменным псевдонима типа данных значения, которые были бы отклонены правилом, привязанным к столбцу такого же типа.
Для получения отчета о правиле следует использовать хранимую процедуру 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 (Transact-SQL)
DROP DEFAULT (Transact-SQL)
ПРАВИЛО ДРОПА (Transact-SQL)
Выражения (Transact-SQL)
sp_bindrule (Transact-SQL)
sp_help (Transact-SQL)
sp_helptext (Transact-SQL)
sp_rename (Transact-SQL)
sp_unbindrule (Transact-SQL)
ГДЕ (Transact-SQL)