Изменение объектов
В то время как оператор CREATE создает новый объект, оператор ALTER предоставляет механизм для изменения определения объекта. Не все объекты, созданные с помощью оператора CREATE, имеют соответствующий оператор ALTER. В таблице 22.2 приведен синтаксис для объектов, которые могут быть изменены.
ALTER DATABASE <имя> <спецификация_файла> | Изменяет файлы, используемые для хранения базы данных |
ALTER FUNCTION <имя> RETURNS <возвращаемое_значение> AS < операторы_tsql> | Изменяет операторы Transact-SQL, содержащие функцию |
ALTER PROCEDURE <имя> AS < операторы_tsql> | Изменяет операторы Transact-SQL, содержащие в себе хранимую процедуру (См. урок 28, "Хранимые процедуры") |
ALTER TABLE <имя> <определение_изменения> | Изменяет определение таблицы (В этом уроке мы подробно рассмотрим <определение_изменения>.) |
ALTER TRIGGER <имя> {FOR | AFTER | INSTEAD OF} <действие_dml> | Изменяет операторы Transact-SQL, содержащие в себе триггер (См. урок 29, "Триггеры") |
ALTER VIEW <имя> AS <оператор_выборки> | Изменяет операторы SELECT, которые создают представление |
Оператор ALTER TABLE является составным по той же причине, почему и оператор CREATE TABLE: определение таблицы состоит из нескольких различных частей. Упрощенная версия синтаксиса для оператора ALTER TABLE приведена ниже:
ALTER TABLE <имя> { [ALTER COLUMN <определение_столбца>] | [ADD <определение_столбца>] | [DROP COLUMN <имя_столбца>] | [ADD [WITH NOCHECK] CONSTRAINT <ограничение_для_таблицы>] }
Ключевые слова CHECK (подразумевается) и NOCHECK перед ограничением таблицы, предписывают SQL Server тестировать или не тестировать имеющиеся в таблице данные с учетом нового ограничения. WITH NOCHECK используется лишь в крайне редких случаях.
Изменение столбцов
Ниже представлено несколько ограничений для фразы ALTER COLUMN. Столбец не может быть изменена, если он:
- имеет тип данных text, image, ntext или timestamp;
- определен в таблице как ROWGIDCOL;
- является вычисляемым столбцом или используется в вычисляемом столбце;
- является реплицированным;
- используется в индексе – если только столбец не имеет тип данных varchar, nvarchar или varbinary; тип данных не изменяется и размер столбца не уменьшается;
- используется в статистике, генерируемой оператором CREATE STATISTIC;
- используется в ограничении PRIMARY KEY;
- используется в ограничении FOREIGN KEY REFERENCES;
- используется в ограничении CHECK;
- используется в ограничении UNIQUE;
- указывается как DEFAULT.
Измените представления
- В Object Browser раскройте папку Columns запроса SimpleView.
увеличить изображение - В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно) для очистки содержимого панели редактирования Editor Pane.
- В панели редактирования введите следующий оператор:
ALTER VIEW SimpleView AS SELECT SimpleDescription, RelatedDescription FROM RelatedTable INNER JOIN SimpleTable ON RelatedTable.SimpleID = SimpleTable.SimpleID
- Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).
- Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого экрана. Object Browser отобразит только столбцы SimpleDescription и RelatedDescription.
увеличить изображение
Добавьте столбцы в таблицу
- В Object Browser раскройте папку Columns таблицы SimpleTable.
увеличить изображение - В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно) для очистки содержимого панели редактирования Editor Pane.
- В панели редактирования введите следующий оператор:
ALTER TABLE SimpleTable ADD NewColumn varchar(20)
- Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос). Query Analyzer добавит столбец в таблицу.
- Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит новый столбец.
увеличить изображение
Измените столбцы в таблице
- В окне запроса выберите вкладку Editor (Редактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно) для очистки содержимого панели редактирования Editor Pane.
- В панели редактирования введите следующий оператор:
ALTER TABLE SimpleTable ADD COLUMN NewColumn varchar(10)
- Для выполнения оператора, в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос). Query Analyzer добавит столбец в таблицу.
- Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser отобразит новый столбец.
увеличить изображение
Удалите столбцы из таблицы
- В окне запроса выберите вкладку Editor (Радактор) и в панели инструментов анализатора запросов Query Analyzer нажмите кнопку Clear Window (Очистить окно) для очистки содержимого панели редактирования Editor Pane.
- В панели редактирования введите следующий оператор:
ALTER TABLE SimpleTable DROP COLUMN NewColumn
- Для выполнения оператора в панели инструментов анализатора запросов Query Analyzer нажмите на кнопку Execute Query (Выполнить запрос).Query Analyzer удалит столбец из таблицы.
- Щелкните на любом месте в панели Object Browser для ее выбора и нажмите клавишу F5 для обновления содержимого окна. Object Browser больше не будет отображать столбец NewColumn.
увеличить изображение