Синтаксис команды:
ALTER TABLE <имя таблицы>
ALTER COLUMN <имя столбца> <новый тип данных> <длина>
[DEFAULT <значение>]
[NULL|NOT NULL] [,…n];
SQL Server не разрешает изменять столбцы типа text, ntext, image, rowversion, вычисляемые столбцы, столбцы, используемые в репликации, и столбцы, на которые имеются ссылки в выражениях вычисляемых столбцов или ограничений, а также столбцы с установленным свойством ROWGUIDCOL[6]. Нельзя удалить или изменить столбец, имеющий значение по умолчанию (ограничение DEFAULT). Однако можно увеличить размер столбцов переменой длины, которые используются в индексах, в ограничениях CHECK или UNIQUE.
Пример 33
Задача.
Увеличить ширину столбца NameGroup, увеличив ее до 20 символов.
Решение.
ALTER TABLE SGroup
ALTER COLUMN NameGroup VARCHAR(20)
The command(s) completed successfully.
Если теперь сделать попытку вернуться к предыдущему размеру столбца, то она будет неудачной, поскольку столбец имеет ограничение UNIQUE.
Пример 34
Задача.
Уменьшить размер столбца NameGroup до 15 символов (предполагается, что ранее она была увеличена до 20 символов).
Решение.
ALTER TABLE SGroup
ALTER COLUMN NameGroup VARCHAR(15)
На этот раз будет диагностирована ошибка.
Server: Msg 5074, The object 'SgroupNameGroupUnique' is dependent on column 'NameGroup'.
Server: Msg 4922, ALTER TABLE ALTER COLUMN NameGroup failed because one or more objects access this column.
Если столбец все-таки необходимо изменить, то сначала следует удалить ограничение SgroupNameGroupUnique,
ALTER TABLE SGroup
DROP CONSTRAINT SgroupNameGroupUnique
Затем уменьшить ширину столбца.
ALTER TABLE SGroup
ALTER COLUMN NameGroup VARCHAR(15)
(2 row(s) affected)
Задание 15
Добавить в таблицу Student столбец Single, тип данных VARCHAR(3), назначив значение по умолчанию “Да”. Удалить столбец.
Задание 16
Добавить в таблицу Student столбец AVGMARK, тип Numeric (5,2). В столбце будет храниться средняя оценка студента. Мы оставим этот столбец в базе данных лишь для того, чтобы в дальнейшем продемонстрировать с помощью него работу некоторых команд и процедур, написание которых как раз и будет обусловлено наличием этого избыточного столбца. Отсюда вывод - такие столбцы, содержащие расчетные данные, полученные на основании уже хранящихся в таблице данных, не следует включать в таблицы.
Задание 17
Изменить длины полей в соответствии с таблицей (см. Таблица 12). Выполнить анализ - почему не удалось выполнить заданные операции с некоторыми столбцами? Что необходимо предпринять, чтобы эти изменения всё же произвести?
Таблица 12
Имя поля | Тип поля | Размер | Ограничения |
IDReport | Varchar | ||
NameWork | Varchar | ||
NameSubject | Varchar | ||
DateHire | Smalldatetime | ||
Mark | Numeric | NULL | |
DeptName | Varchar | NULL | |
NRecordBook | Varchar | ||
NTerm | Numeric | ||
NameReport | Varchar | ||
NameSubject | Varchar | ||
PIN | Varchar | ||
TeachPost | Varchar | NULL | |
Clock | Numeric | 5.2 | |
SName | Varchar | ||
TeachName | Varchar |