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.
См. также
Справочник
Системные хранимые процедуры (Transact-SQL)
Хранимые процедуры ядра СУБД (Transact-SQL)
CREATE RULE (Transact-SQL)
DROP RULE (Transact-SQL)
sp_unbindrule (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)