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


sp_bindrule (Transact-SQL)

Привязывает правило к столбцу или к типу данных псевдонима.

Важное примечаниеВажно!

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

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

Синтаксис

sp_bindrule [ @rulename = ] 'rule' , 
     [ @objname = ] 'object_name' 
     [ , [ @futureonly = ] 'futureonly_flag' ] 

Аргументы

  • [ @rulename=] 'rule'
    Имя правила, созданного при помощи инструкции CREATE RULE. Аргумент rule имеет тип nvarchar(776) и не имеет значения по умолчанию.

  • [ @objname=] 'object_name'
    Таблица и столбец или тип данных псевдонима, к которым будет привязано правило. Правило может быть привязано к text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, пользовательскому типу CLR или столбцу timestamp. Правило не может быть привязано к вычисляемому столбцу.

    Аргумент object_name имеет тип nvarchar(776) и не имеет значения по умолчанию. Если имя аргумента object_name состоит из одной части, оно рассматривается как тип данных псевдонима. Если имя двух- или трехкомпонентное, оно рассматривается как таблица и столбец; в случае неудачи разрешения имя рассматривается как псевдоним типа данных. По умолчанию существующие столбцы типа данных псевдонима наследуют аргумент rule, если он не был напрямую привязан к столбцу.

    ПримечаниеПримечание

    Аргумент object_name может содержать символы скобок [ и ] в качестве символов для идентификаторов с разделителями. Дополнительные сведения см. в разделе Идентификаторы с разделителями (компонент Database Engine).

    ПримечаниеПримечание

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

  • [ @futureonly= ] 'futureonly_flag'
    Используется только при привязывании правила к псевдониму типа данных. Аргумент future_only_flag имеет тип varchar(15) и значение NULL по умолчанию. Этот аргумент, если он установлен в значении futureonly, предотвращает наследование нового правила существующим столбцом типа данных псевдонима. Если аргумент futureonly_flag имеет значение NULL, новое правило привязывается к любому столбцу типа данных псевдонима, который на данный момент не имеет правила, или к тому столбцу, который использует существующее правило типа данных псевдонима.

Значения кодов возврата

0 (успешное завершение) или 1 (неуспешное завершение)

Замечания

Можно привязать новое правило к столбцу (хотя предпочтительнее использовать ограничение CHECK) или к типу данных псевдонима при помощи sp_bindrule без удаления привязки к существующему правилу. Старое правило замещается. Если правило привязано к столбцу с существующим ограничением CHECK, вычисляются все ограничения. Нельзя привязать правило к типу данных SQL Server.

Правило создается принудительно при выполнении инструкции INSERT, а не путем привязки. Можно привязать символьное правило к столбцу с типом данных numeric, хотя такая операция INSERT не является верной.

Существующие столбцы типа данных псевдонима наследуют новые правила, если значение параметра futureonly_flag не установлено в futureonly. Новые столбцы, определяемые как столбцы с типом данных псевдонима, всегда наследуют новое правило. Однако если предложение ALTER COLUMN инструкции ALTER TABLE меняет тип данных столбца на тип данных псевдонима, привязанный к правилу, то правило, привязанное к типу данных, не наследуется столбцом. Правило должно быть четко привязано к столбцу при помощи sp_bindrule.

При привязке правила к столбцу соответствующие сведения добавляются в таблицу sys.columns. При привязке правила к типу данных псевдонима соответствующие сведения добавляются в таблицу sys.types.

Разрешения

Чтобы привязать правило к столбцу таблицы, необходимо разрешение ALTER на таблицу. Чтобы привязать правило к псевдониму типа данных, необходимо разрешение CONTROL на псевдоним типа данных или разрешение ALTER на схему, к которой принадлежит тип.

Примеры

А. Привязка правила к столбцу

Предполагая, что правило с именем today было создано в текущей базе данных при помощи инструкции CREATE RULE, на следующем примере показано, как привязывает правило к столбцу HireDate таблицы Employee. При добавлении строки в Employee данные для столбца HireDate проверяются на соответствие правилу today.

USE master;
GO
EXEC sp_bindrule 'today', 'HumanResources.Employee.HireDate'

Б. Привязка правила к типу данных псевдонима

Предполагая существование правила с именем rule_ssn и типа данных псевдонима с именем ssn, следующий пример привязывает rule_ssn к ssn. В инструкции CREATE TABLE столбцы типа ssn наследуют правило rule_ssn. Существующие столбцы типа ssn также наследуют правило rule_ssn — при условии, что значение futureonly не установлено для futureonly_flag или ssn не имеет правило, напрямую привязанное к нему. Правила, привязанные к столбцам, всегда имеют преимущество перед теми, которые привязаны к типам данных.

USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn'

В. Использование параметра futureonly_flag

На следующем примере показано, как привязать правило rule_ssn к типу данных псевдонима ssn. Так как указан futureonly, никакие существующие столбцы типа ssn не затрагиваются.

USE master;
GO
EXEC sp_bindrule rule_ssn, 'ssn', 'futureonly'

Г. Использование идентификаторов с разделителями

На следующем примере показано, как использовать идентификаторы с разделителями в параметре object_name.

USE master;
GO
CREATE TABLE [t.2] (c1 int) 
-- Notice the period as part of the table name.
EXEC sp_bindrule rule1, '[t.2].c1' 
-- The object contains two periods; 
-- the first is part of the table name 
-- and the second distinguishes the table name from the column name.