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';
C. Использование параметра 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.