Tsql теория > Возвращение модифицированных данных
26.02.2013 11:27:13
Наиболее часто встречающиеся слова в статье:
[Deleted] [GuidelD] [Qualifications] [Возвращение] [вставки] [таблица] [LastName] [FirstName] [DeletedGuides] [операции]
Статья:
SQL Server может при необходимости возвращать модифицированные данные для последующего использования. Это может пригодиться, когда с этими данными должна быть проведена дополнительная работа. Также эти данные могут потребоваться клиентскому приложению для уменьшения нагрузки на сервер.
Возвращение данных из операции вставки
Инструкция INSERT открывает доступ к виртуальной таблице вставки. Следующий пример, взятый из приведенного выше материала главы, был отредактирован для вставки предложения OUTPUT. Виртуальная таблица Inserted содержит вставленные данные и возвращает их:
USE СНА2;
INSERT dbo.Guidelist (LastName, FirstName, Qualifications)
OUTPUT Inserted.*
VALUES('Nielsen', 'Paul','trainer')
Возвращение данных из операции обновления
Предложение OUTPUT также работает и с инструкцией UPDATE и может вернуть снимок данных до и после транзакции. В приводимом примере виртуальная таблица удаления используется для снятия исходных данных, а виртуальная таблица вставки содержит вставляемые значения. Возвращаются только старое и новое значения столбца Qualifications:
USE СНА2;
UPDATE dbo.Guide
SET Qualifications = 'Scuba'
OUTPUT Deleted.Qualifications as OldQuals,
Inserted.Qualifications as NewQuals WHERE GuidelD = 3
Результат выполнения инструкции следующий:
OldQuals NewQuals
NULL Scuba
Возвращение данных из инструкции удаления
При удалении данных только виртуальная таблица удаления содержит сколько-нибудь полезные данные:
DELETE dbo.Guide
OUTPUT Deleted.GuidelD, Deleted.LastName, Deleted.FirstName WHERE GuidelD = 3
Возвращение данных в переменной @таЫе
Программистам Т-SQL предложение OUTPUT может вернуть данные для последующего использования в пакете или хранимой процедуре. В то же время эти данные можно поместить и в табличную переменную. Несмотря на то что синтаксис вам может показаться похожим на инструкцию INSERT. . . INTO, на самом деле эти операции функционируют совсем по-разному.
В приведенном ниже примере предложение OUTPUT передает свой результат табличной переменной @DeletedGuides.
DECLARE @DeletedGuides TABLE (
GuidelD INT,
LastName VARCHAR(50),
FirstName VARCHAR(50)
) ;
DELETE dbo.Guide
OUTPUT Deleted.GuidelD, Deleted.LastName, Deleted.FirstName INTO @DeletedGuides WHERE GuidelD = 2
Промежуточный результат будет следующим:
(1 row(s) affected)
Продолжаем выполнение пакета:
SELECT * FROM @DeletedGuides
Окончательный результат:
(1 row(s) affected)
GuidelD LastName FirstName
2 Frank Ken