Возвращение модифицированных данных

Tsql теория > Возвращение модифицированных данных
26.02.2013 11:27:13



Статья:

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