CREATE RULE (Transact-SQL)CREATE RULE (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server нетБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Создает объект, называемый правилом.Creates an object called a rule. Будучи привязанным к столбцу, имеющему псевдоним типа данных, правило определяет значения, которые могут быть вставлены в этот столбец.When bound to a column or an alias data type, a rule specifies the acceptable values that can be inserted into that column.

Важно!

Этот компонент находится в режиме обслуживания и может быть удален в будущей версии Microsoft SQL Server.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Вместо этой инструкции рекомендуется применять проверку ограничений.We recommend that you use check constraints instead. Эти ограничения создаются при помощи ключевого слова CHECK инструкции CREATE TABLE или ALTER TABLE.Check constraints are created by using the CHECK keyword of CREATE TABLE or ALTER TABLE. Дополнительные сведения см. в статье Ограничения уникальности и проверочные ограничения.For more information, see Unique Constraints and Check Constraints.

К столбцу, имеющему псевдоним типа данных, можно привязать только одно правило.A column or alias data type can have only one rule bound to it. Однако, кроме правила, со столбцом может быть связано одно или несколько ограничений CHECK.However, a column can have both a rule and one or more check constraints associated with it. Если это так, соблюдаются все ограничивающие условия.When this is true, all restrictions are evaluated.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

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

АргументыArguments

schema_nameschema_name
Имя схемы, к которой относится правило.Is the name of the schema to which the rule belongs.

rule_namerule_name
Имя нового правила.Is the name of the new rule. Имена правил должны соответствовать требованиям, предъявляемым к идентификаторам.Rule names must comply with the rules for identifiers. Указывать имя владельца правила необязательно.Specifying the rule owner name is optional.

condition_expressioncondition_expression
Условие или условия, определяющие правило.Is the condition or conditions that define the rule. Правило может быть любым выражением, допустимым в предложении WHERE, и может включать такие элементы, как арифметические операторы, операторы отношений и предикаты (например, IN, LIKE и BETWEEN).A rule can be any expression valid in a WHERE clause and can include elements such as arithmetic operators, relational operators, and predicates (for example, IN, LIKE, BETWEEN). Правило не может ссылаться на столбцы или другие объекты базы данных.A rule cannot reference columns or other database objects. В правило могут входить встроенные функции, не ссылающиеся на объекты базы данных.Built-in functions that do not reference database objects can be included. Определяемые пользователем функции использовать в правилах нельзя.User-defined functions cannot be used.

condition_expression содержит одну переменную.condition_expression includes one variable. Каждой локальной переменной предшествует знак @ .The at sign (@) precedes each local variable. Выражение соответствует значению, введенному при помощи инструкции UPDATE или INSERT.The expression refers to the value entered with the UPDATE or INSERT statement. Для представления значения при создании правила можно использовать любое имя или символ, но первым знаком должен быть знак @ .Any name or symbol can be used to represent the value when creating the rule, but the first character must be the at sign (@).

Примечание

Не следует создавать правила с выражениями, в которых используются псевдонимы типа данных.Avoid creating rules on expressions that use alias data types. Хотя создание таких правил и возможно, но после привязки правил к столбцам или псевдониму типа данных эти выражения компилироваться не будут.Although rules can be created on expressions that use alias data types, after binding the rules to columns or alias data types, the expressions fail to compile when referenced.

RemarksRemarks

Инструкцию CREATE RULE нельзя объединять с другими инструкциями Transact-SQLTransact-SQL в одном пакете.CREATE RULE cannot be combined with other Transact-SQLTransact-SQL statements in a single batch. Правила не распространяются на данные, существовавшие в базе данных на момент создания правил, и не могут быть привязаны к системным типам данных.Rules do not apply to data already existing in the database at the time the rules are created, and rules cannot be bound to system data types.

Правило может быть создано только в текущей базе данных.A rule can be created only in the current database. После создания правила необходимо выполнить хранимую процедуру sp_bindrule для привязки правила к столбцу или псевдониму типа данных.After you create a rule, execute sp_bindrule to bind the rule to a column or to alias data type. Правило должно быть совместимо с типом столбца.A rule must be compatible with the column data type. Например, правило "@value LIKE A%" не может быть привязано к числовому столбцу.For example, "@value LIKE A%" cannot be used as a rule for a numeric column. Правило не может быть привязано к text, ntext, image, varchar(max) , nvarchar(max) , varbinary(max) , xml, определяемому пользователем типу CLR или столбцу timestamp.A rule cannot be bound to a text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, CLR user-defined type, or timestampcolumn. Правило не может быть привязано к вычисляемому столбцу.A rule cannot be bound to a computed column.

Символьные константы и константы-даты следует заключать в одиночные кавычки ('), а двоичные константы — предварять знаками 0x.Enclose character and date constants with single quotation marks (') and precede binary constants with 0x. Если правило несовместимо со столбцом, к которому оно привязано, компонент Компонент SQL Server Database EngineSQL Server Database Engine возвращает сообщение об ошибке при попытке вставки значения в столбец, но не во время привязки правила.If the rule is not compatible with the column to which it is bound, the Компонент SQL Server Database EngineSQL Server Database Engine returns an error message when a value is inserted, but not when the rule is bound.

Правило, привязанное к псевдониму типа данных, активируется только при попытке вставить значение в столбец типа данных псевдонима или обновить такой столбец.A rule bound to an alias data type is activated only when you try to insert a value into, or to update, a database column of the alias data type. Переменные в правилах не проверяются, поэтому не следует присваивать переменным псевдонима типа данных значения, которые были бы отклонены правилом, привязанным к столбцу такого же типа.Because rules do not test variables, do not assign a value to an alias data type variable that would be rejected by a rule that is bound to a column of the same data type.

Для получения отчета о правиле следует использовать хранимую процедуру sp_help.To get a report on a rule, use sp_help. Для отображения текста правила выполните процедуру sp_helptext с именем правила в качестве аргумента.To display the text of a rule, execute sp_helptext with the rule name as the parameter. Для переименования правила следует использовать хранимую процедуру sp_rename.To rename a rule, use sp_rename.

Перед созданием нового правила с именем уже существующего старое правило нужно сбросить с помощью инструкции DROP RULE, а перед сбрасыванием правила нужно отменить его привязку с помощью хранимой процедуры sp_unbindrule.A rule must be dropped by using DROP RULE before a new one with the same name is created, and the rule must be unbound by using sp_unbindrule before it is dropped. Для отмены привязки правила к столбцу следует использовать процедуру sp_unbindrule.To unbind a rule from a column, use sp_unbindrule.

Можно привязать к столбцу или типу данных новое правило без отмены привязки предыдущего правила; в этом случае старое правило будет переопределено новым.You can bind a new rule to a column or data type without unbinding the previous one; the new rule overrides the previous one. Правила, привязанные к столбцам, всегда имеют больший приоритет, чем правила, привязанные к псевдонимам типа данных.Rules bound to columns always take precedence over rules bound to alias data types. Привязка правила к столбцу приводит к замене правила, уже привязанного к псевдониму типа данных, соответствующему данному столбцу.Binding a rule to a column replaces a rule already bound to the alias data type of that column. Однако привязка правила к типу данных не заменяет правило, привязанное к столбцу, имеющему этот псевдоним типа данных.But binding a rule to a data type does not replace a rule bound to a column of that alias data type. Следствия привязки правил к столбцам и псевдонимам типа данных, к которым уже привязаны правила, поясняет следующая таблица.The following table shows the precedence in effect when rules are bound to columns and to alias data types on which rules already exist.

Новое правило привязано кNew rule bound to Старое правило привязано кOld rule bound to

псевдоним типа данныхalias data type
Старое правило привязано кOld rule bound to

СтолбецColumn
Псевдоним типа данныхAlias data type Старое правило заменяетсяOld rule replaced Без изменения.No change
СтолбецColumn Старое правило заменяетсяOld rule replaced Старое правило заменяетсяOld rule replaced

Если столбец имеет и значение по умолчанию, и привязанное к нему правило, значение по умолчанию должно попадать в диапазон, определяемый правилом.If a column has both a default and a rule associated with it, the default must fall within the domain defined by the rule. Значение по умолчанию, конфликтующее с правилом, никогда не вставляется в столбец.A default that conflicts with a rule is never inserted. При попытке вставить в столбец такое значение по умолчанию ядро СУБД SQL Server формирует сообщение об ошибке.The SQL Server Database Engine generates an error message each time it tries to insert such a default.

РазрешенияPermissions

Для выполнения инструкции CREATE RULE необходимо как минимум разрешение CREATE RULE, связанное с текущей базой данных, и разрешение ALTER, связанное со схемой, в которой создается правило.To execute CREATE RULE, at a minimum, a user must have CREATE RULE permission in the current database and ALTER permission on the schema in which the rule is being created.

ПримерыExamples

A.A. Создание правила с диапазономCreating a rule with a range

Следующий код создает правило, ограничивающее диапазон целых чисел, которые могут быть вставлены в столбец или столбцы, связанные с данным правилом.The following example creates a rule that restricts the range of integers inserted into the column or columns to which this rule is bound.

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

Б.B. Создание правила со спискомCreating a rule with a list

Следующий код создает правило, ограничивающее значения, вставляемые в столбец или столбцы (к которым привязано данное правило) только теми значениями, которые указаны в правиле.The following example creates a rule that restricts the actual values entered into the column or columns (to which this rule is bound) to only those listed in the rule.

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

В.C. Создание правила с шаблономCreating a rule with a pattern

Следующий код создает правило, позволяющее вставлять в столбец только значения, начинающиеся на два любых символа, за которыми следуют дефис (-), любое число символов или не следует никаких символов, и завершающиеся целым числом из диапазона от 0 до 9.The following example creates a rule to follow a pattern of any two characters followed by a hyphen (-), any number of characters or no characters, and ending with an integer from 0 through 9.

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

См. также:See Also

ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
CREATE DEFAULT (Transact-SQL) CREATE DEFAULT (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
DROP DEFAULT (Transact-SQL) DROP DEFAULT (Transact-SQL)
DROP RULE (Transact-SQL) DROP RULE (Transact-SQL)
Выражения (Transact-SQL) Expressions (Transact-SQL)
sp_bindrule (Transact-SQL) sp_bindrule (Transact-SQL)
sp_help (Transact-SQL) sp_help (Transact-SQL)
sp_helptext (Transact-SQL) sp_helptext (Transact-SQL)
sp_rename (Transact-SQL) sp_rename (Transact-SQL)
sp_unbindrule (Transact-SQL) sp_unbindrule (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)