Welcome to TechNet Blogs Sign in | Join | Help

Использование оператора OUTPUT для отслеживания изменений DML

Знаете ли вы, что…

 

Вы можете отслеживать изменения данных без использования триггеров:

 

В SQL Server 2005 оператор OUTPUT является частью синтаксиса DML предложений.

Например:

 

INSERT

    [ TOP ( expression ) [ PERCENT ] ]

    [ INTO ]

    { <object> | rowset_function_limited

      [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]

    }

{

    [ ( column_list ) ]

    [ <OUTPUT Clause> ]

    { VALUES ( ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ] )

    | derived_table

    | execute_statement

    | <dml_table_source>

    | DEFAULT VALUES

    }

}

 

Оператор OUTPUT может сохранять результирующее множество строк затронутых DML оператором в таблицу или переменную типа таблица.

Например, сохранить все добавленные (или удаленные) строки.

 

Функционально это похоже на промежуточные таблицы INSERTED и DELETED, используемые триггерами.

 

Пример:

--Создадим таблицу Address

Create Table Address (ProductID Int, SupplierID Int, Address Varchar(255))

 

--Вставим данные в таблицу

Insert into Address Values (234,567,'1234 One SQL Way, Microsoft City, U.S.')

Insert into Address Values (345,678,'1234 One Windows Way, Microsoft City, WA')

 

--Объявим табличную переменную

Declare @Recordchanges table (change Varchar(255))

 

--Обновим данные в таблице

Update Address

Set Address=reverse(address)

--Запишем изменения в табличную переменную

OUTPUT 'Изначальные данные:' + DELETED.Address+' изменены на: '+ INSERTED.Address+'' into @RecordChanges

 

--Читаем изменения из табличной переменной

Select * from @RecordChanges

 

На выходе имеем:

 

Change

------------------------

Изначальные данные:'1234 One SQL Way, Microsoft City, U.S.' has been изменены на: '.S.U ,ytiC tfosorciM ,yaW LQS enO 4321'

 

Изначальные данные:'1234 One Windows Way, Microsoft City, WA' has been изменены на: 'AW ,ytiC tfosorciM ,yaW swodniW enO 4321'

 

Published Saturday, June 23, 2007 3:02 AM by Lyudmila Fokina

Comments

No Comments
Anonymous comments are disabled
 
Page view tracker