Преподаватель
Опубликован: 11.12.2006 | Уровень: специалист | Доступ: свободно
Лекция 16:

Создание и использование умолчаний, ограничений и правил

Оператор CREATE DEFAULT и процедура sp_bindefault

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

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

CREATE DEFAULT имя_умолчания AS выражение-константа
Процедура sp_bindefault имеет следующий синтаксис:
sp_bindefault 'имя_умолчания', таблица.колонка | определенный_пользователем_тип_данных
[, futureonly]

Параметр имя_умолчания – это имя Default-объекта. Параметр таблица.колонка указывает колонку, которой вы хотите присваивать это умолчание.

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

USE MyDB
GO 
CREATE DEFAULT DF_not_applicable AS 'n/a' 
GO 
sp_bindefault 'DF_not_applicable', 'MyTable.columnA' 
GO

Если для колонки columnA уже задано значение по умолчанию, то SQL Server возвратит сообщение об ошибке, информирующее вас, что вы не можете выполнить привязку умолчания к колонке, для которой уже задано какое-либо умолчание. Удалите сначала это умолчание и затем выполните привязку нового умолчания к данной колонке. (Процесс использования оператора DROP DEFAULT для удаления Default-объекта описывается ниже в этом разделе.)

Вы можете также создать Default-объект и выполнить его привязку непосредственно к определенному пользователем типу данных. Любая колонка, которой присваивается этот конкретный тип данных, наследует данное умолчание автоматически. Вы можете использовать при обращении к процедуре sp_bindefault необязательный параметр futureonly, когда выполняете привязку Default-объекта к определенному пользователем типу данных. Этот параметр препятствует тому, чтобы существующие колонки, имеющие этот определенный пользователем тип данных, наследовали новое умолчание; тем самым только новые колонки с этим типом данных будут наследовать это умолчание. Если параметр 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_help (рис. 16.2).

Результаты Query Analyzer для процедуры sp_help

увеличить изображение
Рис. 16.2. Результаты Query Analyzer для процедуры sp_help
Процедура 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 для повторного создания этого объекта.

Определение и модифицирование умолчаний с помощью Enterprise Manager

Как вы уже видели в "Управление таблицами с помощью T-SQL и Enterprise Manager" , использование Enterprise Manager – это, видимо, наиболее простой способ создания, просмотра и модифицирования таблиц вашей базы данных. При создании или модифицировании таблицы или колонки с помощью Enterprise Manager система SQL Server автоматически берет на себя исполнение соответствующих команд T-SQL, выполняя эту работу за вас. (Пошаговые инструкции по созданию таблицы с помощью Enterprise Manager см. в "Создание таблиц баз данных" .) В этом разделе мы рассмотрим особенности использования Enterprise Manager для присваивания и модифицирования умолчания по колонке и создания Default-объекта. Это предпочтительный метод работы. Начнем с примеров присваивания и модифицирования умолчаний.

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Игорь Соловьев
Игорь Соловьев
Россия, Братск