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

Лекция 20: Расширенное описание T-SQL

Добавление строк из другой таблицы

Вы можете также вставлять строки в таблицу из другой таблицы. Для этого можно использовать производную таблицу в операторе INSERT или предложение EXECUTE с хранимой процедурой, которое возвращает строку данных.

Примечание. Производная таблица (derived table) – это результирующий набор из оператора SELECT ; встраивается в предложение FROM другого оператора T-SQL. (Подробнее см. "лекцию 14" .)

Для выполнения вставки с помощью производной таблицы создадим сначала вторую небольшую таблицу с именем 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.

Дополнительная информация. Вы можете также включить в оператор INSERT подсказки блокировки на уровне таблицы. Для получения более подробной информации о подсказках, которые можно использовать с оператором INSERT, щелкните на вкладке Search (Поиск) в Books Online для поиска "Locking Hints" (Подсказки блокировки) и выберите тему "Locking Hints".
Станислав Ляльков
Станислав Ляльков
Россия, Саратов