После создания таблицы в базе данных в нее часто требуется вносить некоторые изменения. К числу возможных модификаций относится, например, добавление столбцов, изменение типов данных в существующих столбцах, объявление первичных ключей и т. д.
Для внесения изменений в уже созданные таблицы стандартом SQL предусмотрен оператор ALTER TABLE, предназначенный для выполнения следующих действий:
· добавление в таблицу нового столбца:
· удаление столбца из таблицы;
· добавление в определение таблицы нового ограничения;
· удаление из определения таблицы существующего ограничения;
· задание для столбца значения по умолчанию;
· отмена для столбца значения по умолчанию.
Оператор изменения таблицы имеет следующий обобщенный формат:
Здесь параметры имеют то же самое назначение, что и в определении
оператора CREATE TABLE.
Оператор alter table реализован не во всех диалектах языка SQL.
В некоторых диалектах он поддерживается, однако не позволяет
удалять из таблицы уже существующие столбцы,
Помните, что вы не сможете удалить ограничение первичного ключа при наличии ограничений внешнего ключа, ссылающегося на него.
Дополнение таблиц
С помощью команды ALTER TABLE, после создания таблицы в нее можно добавить новые столбцы, ограничения и значения по умолчанию.
Например:
ALTER TABLEAuthor
ADD
[ИНН] char (16) NULL
CONSTRAINT inn CHECK[ИНН] LIKE '78%',
[Пол] bit NULL
В этой команде добавляются два новых столбца: для хранения информации об ИНН и поле автора. А для столбца ИНН устанавливается ограничение: ИНН должен начинаться с цифр 78.
Новые столбцы могут представлять собой вычисляемые выражения и объявляться с ограничениями уровня столбцов.
Удаление отдельных полей из таблицы
Из созданной таблицы можно удалить столбцы или ограничения.
При удалении ограничений следует помнить, что выполнению команд могут помешать некоторые зависимости. Например, если столбец является первичным ключом, вы должны удалить это ограничение (ограничение первичного ключа) до удаления столбца.
Если в другой таблице существует ссылка на столбец, SQL Server также не позволит удалить его до снятия ограничения.
Примеры команды alter table…drop:
ALTER TABLE Authors DROP CONSTRAINT inn
ALTER TABLE Authors DROP COLUMN [ИНН]
Модификация столбцов
Иногда требуется изменить тип данных столбца. Неверный тип приводит к неэффективному хранению данных, или же данные могут оказаться слишком большими и не помещаться в столбцах. Для этого можно использовать команду alter table.
Например, выяснилось, что не хватает 50 символов для хранения имени автора. У издательства появился новый автор с экзотическим именем длиной 100 символов. Вам необходимо увеличить размер столбца, в котором хранится имя.
Вот команда, которая делает это:
ALTER TABLE Authors
ALTER COLUMN FirstName varchar(100)
Здесь нужно учитывать, что при модификации столбца должно осуществляться неявное преобразование старого типа данных в новый. Перед модификацией нужно проверить, возможно ли это. Так, например, новый тип данных не может иметь типом timestamp.
И, кроме того, если модифицированный столбец является столбцом счетчика, новый тип данных должен быть допустимым для столбцов счетчика.
Временные таблицы
Временные таблицы похожи на обычные, однако они не предназначены для постоянного хранения данных. Во временных таблицах часто хранятся данные, которые должны быть модифицированы или использованы позднее.
Временные таблицы создаются, удаляются и используются как обычные таблицы.
Перечислим главные отличия временных таблиц от обычных:
· имя временной таблицы должно начинаться с символов # или ##;
· длина имени временной таблицы ограничивается 116 символами;
· временные таблицы удаляются при отключении пользователя от базы данных;
· временные таблицы используются так, как будто они входят в текущую базу данных, однако в действительности данные хранятся в базе TEMT_DB.
В SQL Server существуют два типа временных таблиц: локальные и глобальные.
Локальные временные таблицы
Иногда бывает необходимо создавать локальную временную таблицу для помещения в неё обрабатываемую информацию.
Такие таблицы будут доступны лишь для своего владельца.
Имена локальных временных таблиц должны начинаться с префикса #.
В следующем примере создается локальная временная таблица с именем # TEMPL:
CREATE TABLE # TEMPL ( a int NULL, b varchar(25) NULL)