Поделиться через


sp_bindefault (Transact-SQL)

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

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

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

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