sp_bindefault (Transact-SQL)
Привязывает значение по умолчанию к столбцу или псевдониму типа данных.
Важно! |
---|
В будущей версии Microsoft SQL Server эта возможность будет удалена. Не используйте ее при работе над новыми приложениями и как можно быстрее измените приложения, в которых она в настоящее время используется. Вместо этого рекомендуется создавать определения значений по умолчанию с использованием ключевого слова DEFAULT в инструкциях ALTER TABLE или CREATE TABLE. Дополнительные сведения см. в разделе Изменение и создание определений DEFAULT. |
Синтаксис
sp_bindefault [ @defname = ] 'default' ,
[ @objname = ] 'object_name'
[ , [ @futureonly = ] 'futureonly_flag' ]
Аргументы
[ @defname= ] 'default'
Имя значения по умолчанию, созданное с помощью инструкции CREATE DEFAULT. Аргумент default имеет тип nvarchar(776) и не имеет значения по умолчанию.[ @objname=] 'object_name'
Имя таблицы и столбца либо псевдонима типа данных, к которому будет привязано значение по умолчанию. Аргумент object_name имеет тип nvarchar(776) и не имеет значения по умолчанию. Аргумент object_name нельзя определить с помощью типов данных varchar(max), nvarchar(max), varbinary(max), xml или определяемым пользователем типом данных CLR.Если значение аргумента object_name состоит из одной части, оно рассматривается как псевдоним типа данных. Если оно двух- или трехкомпонентное, предпринимается попытка рассмотреть его как таблицу и столбец; в случае неудачи имя рассматривается как псевдоним типа данных. По умолчанию существующие столбцы, имеющие псевдоним типа данных, наследуют значение default, если значение по умолчанию не привязано непосредственно к столбцу. Значение по умолчанию нельзя привязать к столбцам типов данных text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp или пользовательского типа данных среды CLR, столбцу со свойством IDENTITY, вычисляемому столбцу и столбцу, уже имеющему ограничение DEFAULT.
Примечание object_name может содержать квадратные скобки [] в качестве идентификаторов с разделителями. Дополнительные сведения см. в разделе Идентификаторы с разделителями (компонент Database Engine).
[ @futureonly= ] 'futureonly_flag'
Используется только при привязке значения по умолчанию к псевдониму типа данных. Аргумент futureonly_flag имеет тип varchar(15) и значение по умолчанию NULL. Если этому аргументу присвоено значение futureonly, существующие столбцы с этим типом данных не могут наследовать новое значение по умолчанию. Этот аргумент никогда не используется при привязке значения по умолчанию к столбцу. Если аргумент futureonly_flag имеет значение NULL, новое значение по умолчанию привязывается ко всем столбцам с псевдонимом типа данных, которые в настоящий момент не имеют значения по умолчанию или используют существующее значение по умолчанию псевдонима типа данных.
Значения кодов возврата
0 (успешное завершение) или 1 (неуспешное завершение)
Замечания
Чтобы привязать новое значение по умолчанию к столбцу или к псевдониму типа данных без отмены привязки существующего значения по умолчанию, можно использовать процедуру sp_bindefault, хотя в первом случае предпочтительнее ограничение DEFAULT. Старое значение по умолчанию переопределяется. Нельзя привязать значение по умолчанию к системному типу данных SQL Server или пользовательскому типу данных среды CLR. Если значение по умолчанию несовместимо со столбцом, к которому оно привязано, SQL Server Database Engine возвращает сообщение об ошибке при вставке значения по умолчанию, а не при его привязке.
Существующие столбцы с псевдонимом типа данных наследуют новое значение по умолчанию, если значение по умолчанию не привязано непосредственно к ним или для аргумента futureonly_flag не задано значение futureonly. Новые столбцы с псевдонимом типа данных всегда наследуют значение по умолчанию.
При привязке значения по умолчанию к столбцу связанные с ним данные добавляются в представление каталога sys.columns. При привязке значения по умолчанию к псевдониму типа данных связанные с ним данные добавляются в представление каталога sys.types.
Разрешения
Пользователь должен быть владельцем таблицы, членом предопределенной роли сервера sysadmin либо членом предопределенной роли базы данных db_owner или db_ddladmin.
Примеры
А. Привязка значения по умолчанию к столбцу
Значение по умолчанию с именем today было определено в текущей базе данных с помощью инструкции CREATE DEFAULT. В следующем примере это значение по умолчанию привязывается к столбцу HireDate в таблице Employee. Каждый раз, когда в таблицу Employee добавляется строка, а данные для столбца HireDate не заданы, этот столбец получает значение по умолчанию today.
USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
Б. Привязка значения по умолчанию к псевдониму типа данных
Значение по умолчанию с именем def_ssn и псевдоним типа данных с именем ssn уже существуют. В следующем примере значение по умолчанию def_ssn привязывается к псевдониму ssn. Когда создается таблица, значение по умолчанию наследуется всеми столбцами, которым присвоен псевдоним типа данных ssn. Существующие столбцы с типом ssn также наследуют значение по умолчанию def_ssn, если для futureonly_flag не задано значение futureonly или к столбцу непосредственно не привязано значение по умолчанию. Значения по умолчанию, которые привязаны к столбцам, всегда имеют приоритет над значениями по умолчанию, привязанными к псевдониму типа данных.
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn';
В. Использование аргумента futureonly_flag
В следующем примере значение по умолчанию def_ssn привязывается к псевдониму типа данных ssn. Поскольку задано значение futureonly, на существующие столбы с типом ssn эта операция не влияет.
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';
Г. Использование идентификаторов с разделителями
В следующем примере показано использование идентификаторов с разделителями [t.1] в аргументе object_name.
USE master;
GO
CREATE TABLE [t.1] (c1 int)
-- Notice the period as part of the table name.
EXEC sp_bindefault 'default1', '[t.1].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.