Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LektsiiNovye.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.92 Mб
Скачать

Оператор create default и процедура sp_bindefault

Также можно добавить умолчание к существующей колонке или изменить умолчание по колонке, создав сначала Default-объект с помощью оператора T-SQL CREATE DEFAULT. Создав Default-объект, можно затем связать его с колонкой или с определённым пользователем типом данных, используя системную хранимую процедуру sp_bindefault. Этот метод не является предпочтительным, но может оказаться полезным, если используется одно значение по умолчанию для колонок нескольких таблиц.

Рассмотрим пример использования оператора CREATE DEFAULT для создания Default-объекта с именем DF_not_applicable и значением n/a. Это умолчание будет создано отдкльно и затем будет связано с колонкой columnA таблицы MyTable (в предположении, что для этой таблицы не существует никаких умолчаний). Оператор CREATE DEFAULT имеет следующий синтаксис:

CREATE DEFAULT <default_name> AS <const_expression>

Процедура sp_bindefault имеет следующий синтаксис:

sp_bindefault '<default_name>', <table_name>.<column_name> | <user_defind_data_type> [, futureonly]

С помощью следующих операторов T-SQL создается Default-объект и происходит его привязка к колонке columnA таблицы MyTable:

CREATE DEFAULT DF_not_applicable AS 'n/a'

GO

sp_bindefault 'DF_not_applicable', 'MyTable.columnA'

GO

Если для колонки columnA уже задано значение по умолчанию, то SQL Server возвратит сообщение об ошибке, информирующее, что нельзя выполнить привязку умолчания к колонке, для которой уже задано какое-либо умолчание. Следует сначала удалить это умолчание и затем выполнить привязку нового умолчания к данной колонке.

Можно также создать Default-объект и выполнить его привязку непосредственно к определённому пользователем типу данных. Любая колонка, которой присваивается этот конкретный тип данных, наследует данное умолчание автоматически. Необязательный параметр futureonly процедуры sp_bindefault при связывании значения по умолчания и пользовательского типа данных препятствует тому, чтобы существующие колонки, имеющие этот тип данных, наследовали новое умолчание; тем самым только новые колонки с этим типом данных будут наследовать это умолчание. Если параметр futureonly не указан, то SQL Server выполнит привязку ко всем существующим и вновь создаваемым колонкам, имеющим определённый пользователем тип данных.

Например, создадим определённый пользователем тип данных с именем area_code и Default-объект с именем DF_area_code и значением 786; тем самым будет выполнена привязка этого умолчания к определённому пользователем типу данных. Это новый определённый пользователем тип данных, т.е. ещё нет колонок с этим типом данных, поэтому параметр futureonly не требуется. Тем не менее, включим его, чтобы показать его синтаксис, хотя это не окажет никакого влияния. Ниже показаны соответствующие операторы:

sp_addtype 'area_code', 'char(3)', 'NOT NULL'

GO

CREATE DEFAULT DF_area_code AS 786

GO

sp_bindefault 'DF_area_code', 'area_code', 'futureonly'

GO

Процедура sp_unbindefault

Чтобы аннулировать привязку Default-объекта к колонке или определённому пользователем типу данных, необходимо использовать процедуру sp_unbindefault, указав имя таблицы и имя колонки или имя определённого пользователем типа данных. Например, для аннулирования привязки Default-объекта DF_not_applicable к колонке columnA таблицы MyTable используется следующий оператор:

sp_unbindefault 'MyTable.columnA'

GO

Для аннулирования привязки умолчания к определенному пользователем типу данных area_code используйте следующий оператор:

sp_unbindefault 'area_code'

GO

После этого все колонки, которым был присвоен определённый пользователем тип данных area_code, уже не обладают свойством использования умолчания.

Можно выполнить привязку Default-объекта к более чем одной колонке с помощью отдельных операторов sp_bindefault. Кроме того, отменив привязку умолчания к колонке, можно снова выполнить его привязку, пока не удалён сам Default-объект. Для удаления Default-объект, используется оператор DROP DEFAULT, как это показано ниже:

DROP DEFAULT DF_area_code

GO

После удаления Default-объекта он уже недоступен. Если вам нужно использовать его снова, вы должны применить оператор CREATE DEFAULT для повторного создания этого объекта.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]