http://blogs.technet.com/lyudmila_fokina/archive/2007/06/23/output-dml.aspx
Людмила Фокина
Знаете ли вы, что… Вы можете отслеживать изменения данных без использования триггеров: В 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'
Комментариев нет:
Отправить комментарий