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


sp_bindefault (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

Внимание

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_bindefault
    [ @defname = ] N'defname'
    , [ @objname = ] N'objname'
    [ , [ @futureonly = ] 'futureonly' ]
[ ; ]

Аргументы

[ @defname = ] N'defname'

Имя созданного по умолчанию CREATE DEFAULT. @defname является nvarchar(776), без значения по умолчанию.

[ @objname = ] N'objname'

Имя таблицы и столбца или типа данных псевдонима, к которому необходимо привязать значение по умолчанию. @objname — nvarchar(776) без значения по умолчанию. @objname нельзя определить с помощью varchar(max), nvarchar(max), varbinary(max), xml или clR определяемых пользователем типов.

Если @objname является именем одной части, он разрешается в качестве типа данных псевдонима. Если это двух- или трехкомпонентное имя, он сначала разрешается в виде таблицы и столбца; и если это разрешение завершается ошибкой, он разрешается как тип данных псевдонима. По умолчанию существующие столбцы типа данных псевдонима наследуют @defname, если значение по умолчанию не привязано непосредственно к столбцу. Значение по умолчанию нельзя привязать к тексту, ntext, image, varchar(max),nvarchar(max), varbinary(max), xml, timestamp или столбцу определяемого пользователем типа CLR, столбцу со IDENTITY свойством, вычисляемым столбцом или столбцомDEFAULT, который уже имеет ограничение.

@objname может содержать скобки ([и]) в виде идентификаторов с разделителями. Дополнительные сведения см. в разделе "Идентификаторы базы данных".

[ @futureonly = ] 'futureonly'

Используется только при привязке по умолчанию к типу данных псевдонима. @futureonly — varchar(15) с значением по умолчаниюNULL. Если для этого параметра задано futureonlyзначение, существующие столбцы этого типа данных не могут наследовать новое значение по умолчанию. Этот аргумент никогда не используется при привязке значения по умолчанию к столбцу. Если @futureonly , NULLновое значение по умолчанию привязано к любым столбцам типа данных псевдонима, которые в настоящее время не имеют значения по умолчанию или используют существующий тип данных псевдонима.

Значения кода возврата

0 (успешно) или 1 (сбой).

Замечания

Можно использовать sp_bindefault для привязки нового по умолчанию к столбцу, хотя DEFAULT это ограничение предпочтительно или к типу данных псевдонима без привязки существующего по умолчанию. Старое значение по умолчанию переопределяется. Не удается привязать по умолчанию тип данных системы SQL Server или определяемый пользователем тип СРЕДЫ CLR. Если значение по умолчанию несовместимо с столбцом, к которому он привязан, sql Server ядро СУБД возвращает сообщение об ошибке при попытке вставить значение по умолчанию, а не при привязке.

Существующие столбцы типа данных псевдонима наследуют новое значение по умолчанию, если только значение по умолчанию не привязано непосредственно к ним или в будущем указано как 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';

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

Значение по умолчанию с именем def_ssn и псевдоним типа данных с именем ssn уже существуют. В следующем примере значение по умолчанию def_ssn привязывается к псевдониму ssn. Когда создается таблица, значение по умолчанию наследуется всеми столбцами, которым присвоен псевдоним типа данных ssn. Существующие столбцы типа ssn также наследуют значение по умолчанию, если futureonly только не указано для значения @futureonly, или столбец имеет привязку по умолчанию def_ssnнепосредственно к нему. Значения по умолчанию, привязанные к столбцам, всегда имеют приоритет над значениями по умолчанию, привязанными к типам данных.

USE master;
GO

EXEC sp_bindefault 'def_ssn', 'ssn';

C. Использование параметра futureonly

В следующем примере значение по умолчанию def_ssn привязывается к псевдониму типа данных ssn. Так как указан futureonly, никакие существующие столбцы типа ssn не затрагиваются.

USE master;
GO

EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';

D. Использование идентификаторов с разделителями

В следующем примере показано использование идентификаторов с разделителями в [t.1]@objname.

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.