sp_bindefault (Transact-SQL)

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

Важное примечаниеВажно!

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

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Значок ссылки на раздел Cинтаксические обозначения в Transact-SQL

Синтаксис

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 может содержать квадратные скобки [] в качестве идентификаторов с разделителями.Дополнительные сведения см. в разделе Идентификаторы баз данных.

  • [ @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.

См. также

Справочник

Хранимые процедуры ядра СУБД (Transact-SQL)

CREATE DEFAULT (Transact-SQL)

DROP DEFAULT (Transact-SQL)

Хранимая процедура sp_unbindefault (Transact-SQL)

Системные хранимые процедуры (Transact-SQL)