sp_bindrule (Transact-SQL)
Привязывает правило к столбцу или к типу данных псевдонима.
Важно! |
---|
В будущей версии Microsoft SQL Server эта возможность будет удалена. Не используйте ее при работе над новыми приложениями и как можно быстрее измените приложения, в которых она в настоящее время используется. Вместо этого используйте ограничения CHECK. Ограничения CHECK создаются при помощи ключевого слова CHECK инструкции CREATE TABLE или ALTER TABLE. |
Синтаксис
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.