Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989 |
Лекция 20: Расширенное описание T-SQL
Добавление строк из другой таблицы
Вы можете также вставлять строки в таблицу из другой таблицы. Для этого можно использовать производную таблицу в операторе INSERT или предложение EXECUTE с хранимой процедурой, которое возвращает строку данных.

Для выполнения вставки с помощью производной таблицы создадим сначала вторую небольшую таблицу с именем two_newest_items, в которую мы поместим строки из таблицы items. Ниже показан оператор CREATE TABLE для новой таблицы:
CREATE TABLE two_newest_items ( item_id SMALLINT NOT NULL, item_desc VARCHAR(30) DEFAULT 'No desc' ) GO
Для вставки двух последних значений из колонок item_id и item_desc таблицы items в таблицу two_newest_items используйте следующий оператор INSERT:
INSERT INTO two_newest_items (item_id, item_desc) SELECT TOP 2 item_id, item_desc FROM items ORDER BY item_id DESC GO
Отметим, что вместо списка значений в этом операторе INSERT мы использовали оператор SELECT. Этот оператор возвращает данные из существующей таблицы, и эти данные используются как список значений. Кроме того, мы не использовали круглые скобки вокруг оператора SELECT, что привело бы к синтаксической ошибке.
Для получения всех строк этой новой таблицы мы можем использовать следующий запрос:
SELECT * FROM two_newest_items
Появится следующий набор результатов:
item_id item_desc --------------------- 3 No desc 2 fried pork skins
Отметим, что мы включили в оператор INSERT предложение ORDER BY item_id DESC. Это предложение указывает SQL Server, что нужно упорядочить результаты по элементу item_id в порядке убывания.
Если создать оператор SELECT в предыдущем примере вставки в виде хранимой процедуры и использовать оператор EXECUTE с именем хранимой процедуры, то мы получим те же результаты, что и в этом примере. (Хранимые процедуры описываются в "лекции 21" .) Для этого мы сначала удалим с помощью оператора DELETE все существующие строки в таблице two_newest_items, чтобы можно было начать работу с пустой таблицы (см. в раздел "Оператор DELETE" далее). Затем мы создадим хранимую процедуру с именем top_two и применим ее с оператором EXECUTE для вставки двух новых строк в таблицу two_newest_items. Для выполнения этих операций используются следующие операторы T-SQL:
DELETE FROM two_newest_items GO CREATE PROCEDURE top_two AS SELECT TOP 2 item_id, item_desc FROM items ORDER BY item_id DESC GO INSERT INTO two_newest_items (item_id, item_desc) EXECUTE top_two GO
Удаляются две строки, вставленные в предыдущем примере, и затем оператор INSERT помещает две новые строки (содержащие те же данные) с помощью хранимой процедуры top_two.
