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


sp_bindrule (Transact-SQL)

Область применения: SQL Server База данных SQL Azure

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

Внимание

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

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

Синтаксис

sp_bindrule
    [ @rulename = ] N'rulename'
    , [ @objname = ] N'objname'
    [ , [ @futureonly = ] 'futureonly' ]
[ ; ]

Аргументы

[ @rulename = ] N'rulename'

Имя правила, созданного инструкцией CREATE RULE . @rulename — nvarchar(776), без значения по умолчанию.

[ @objname = ] N'objname'

Таблица и столбец или тип данных псевдонима, к которому должно быть привязано правило. @objname — nvarchar(776) без значения по умолчанию.

Правило не может быть привязано к тексту, ntext, image, varchar(max),nvarchar(max), varbinary(max), xml, clR определяемого пользователем типу или столбцу метки времени. Правило не может быть привязано к вычисляемого столбцу.

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

@objname могут содержать символы скобки ([и]) в виде символов идентификатора с разделителями. Дополнительные сведения см. в разделе "Идентификаторы базы данных".

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

[ @futureonly = ] 'futureonly'

Используется только при привязке правила к типу данных псевдонима. @futureonly — varchar(15) с значением по умолчаниюNULL. Этот параметр, если задано futureonlyзначение, запрещает существующим столбцам типа данных псевдонима наследовать новое правило. Если @futureonly , NULLновое правило привязано к любым столбцам типа данных псевдонима, которые в настоящее время не имеют правила или используют существующее правило типа данных псевдонима.

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

0 (успешно) или 1 (сбой).

Замечания

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

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

Существующие столбцы типа данных псевдонима наследуют новое правило, если @futureonly не указано как 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';

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

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

USE master;
GO

EXEC sp_bindrule 'rule_ssn', 'ssn';

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

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

USE master;
GO

EXEC sp_bindrule rule_ssn, 'ssn', 'futureonly';

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

В следующем примере показано использование идентификаторов с разделителями в параметре @objname .

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.