Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5821 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00
Лекция 16:

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

Оператор ALTER TABLE с атрибутом DEFAULT

Чтобы изменить определение DEFAULT для колонки или добавить это определение к колонке, вы можете использовать оператор ALTER TABLE. Если значение по умолчанию уже определено и вам нужно изменить его с помощью этой команды, то вы должны сначала удалить существующее умолчание, указав его имя, и затем добавить новое умолчание. (При использовании Enterprise Manager вам не придется выполнять этот шаг, и это поможет вам понять, что использование Enterprise Manager является более простым методом. Изменив таблицу с помощью Enterprise Manager, вы можете также в любой момент генерировать сценарии для повторного создания таблицы.)

Предположим, что вы не хотите изменять существующее умолчание. Если вы создали умолчание с помощью оператора CREATE TABLE или с помощью Enterprise Manager (что будет описано ниже в этой лекции), но не присвоили имя самому умолчанию, то SQL Server присвоит имя автоматически. Чтобы выяснить, какое имя было присвоено умолчанию (имя используется для удаления умолчания с помощью T-SQL), вы можете запустить хранимую процедуру sp_help, указав имя таблицы, для которой задано это умолчание, как в следующем примере:

USE MyDB
GO
sp_help MyTable
GO

Имена всех ограничений default по таблице MyTable появятся в конце выводимых результатов в столбце под заголовком constraint_name (имя_ограничения) (рис. 16.1).

Предположим, что вы хотите изменить для колонки columnA значение по умолчанию n/a на значение not applicable. Напомним, что мы должны сначала удалить существующее умолчание и затем добавить новое. Чтобы удалить умолчание, используйте следующий оператор:

ALTER TABLE MyTable
DROP CONSTRAINT DF__MyTable__columnA__1920BF5CGO

С помощью следующего оператора мы можем теперь добавить новое умолчание, присвоив ему на этот раз имя:

ALTER TABLE MyTable
ADD CONSTRAINT DF_MyTable_columnA  
DEFAULT 'not applicable' FOR columnA 
GO

Если вы изменяете существующее умолчание по какой-либо колонке, для всех существующих строк в этой колонке остаются прежние значения, даже если это значение NULL. Новое значение по умолчанию будет использоваться только для новых строк.

 Результаты работы хранимой процедуры sp_help

увеличить изображение
Рис. 16.1. Результаты работы хранимой процедуры sp_help
ALTER TABLE MyTable
ADD columnC tinyint 	NOT NULL DEFAULT 13 
GO

Теперь таблица MyTable содержит еще одну колонку, columnC, которая имеет значение по умолчанию 13. Поскольку columnC – новая колонка, определенная с атрибутом NOT NULL, этой колонке в уже существующих строках таблицы будет присвоено значение по умолчанию 13.

Если бы в новой колонке было разрешено использование значений NULL, то все существующие строки получили бы в новой колонке значение NULL. Если нужно, чтобы этой колонке было присвоено значение по умолчанию (вместо NULL), то в предложении DEFAULT нужно использовать параметр WITH VALUES, как это показано ниже:

ALTER TABLE MyTable
ADD columnC tinyint 	NULL DEFAULT 13 WITH VALUES 
GO

При использовании WITH VALUES новой колонке во всех существующих строках таблицы MyTable будет присвоено значение 13 (вместо значения NULL ).

Теперь, когда вы знаете, как создавать определение DEFAULT, которое сохраняется вместе с таблицей, рассмотрим использование оператора CREATE DEFAULT. С помощью этого метода создается Default -объект, который хранится отдельно от таблицы.