INSERT over DML
INSERT over DML ist eine Vereinfachung im Gebrauch der in SQL Server 2005 eingeführten OUTPUT Klausel, die es zusätzlich erlaubt Daten zu filtern.
Zur Erinnerung: Die OUTPUT Klausel gibt die einem DML Statement (UPDATE, INSERT, DELETE, MERGE) Einträge der systemeigenen Tabellen inserted und deleted zurück (Besonderheiten bei MERGE im nächsten Artikel). Diese können direkt an den Datenkonsumenten zurückgegeben werden oder in eine Variable vom Typ Table geschrieben werden, um dort weiterverarbeitet zu werden, beispielsweise um Logs zu schreiben.
INSERT over DML kürzt den letzteren Weg ab. Statt die Daten in eine Variable vom Typ Table zu schreiben und von dort aus in eine Logging Tabelle, kann mittels INSERT over DML direkt in die Logging Tabelle geschrieben werden. Zusätzlich können die Daten mit WHERE gefiltert werden. Dies ist eine atomare Operation.
Zuerst einmal Testdaten erzeugen
use tempdb
create table dbo.products
(
id int,
price money
)
create table dbo.prodlog
(
id int,
diff money,
)
declare @prodlog table
(
id int,
diff money
)
insert into dbo.products values
(1, 1),
(2, 1.23),
(3, 2.05),
(4, 1.99),
(5, .5)
--Die Transaktion dient dazu, die Daten wieder im Ursprungszustand wiederherzustellen
begin tran
--SQL Server 2005 Vorgehensweise
update dbo.products set
price *= 1.25
output
inserted.id id
,inserted.price - deleted.price diff
into @prodlog
insert into dbo.prodlog
select
id
,diff
from @prodlog
where
diff > .5
select * from dbo.prodlog
rollback
--SQL Server 2008 Vorgehensweise
insert into dbo.prodlog
select
id
,diff
from
(
update dbo.products set
price *= 1.25
output
inserted.id id
,inserted.price - deleted.price diff
) U
where
diff > .5
select * from dbo.prodlog
--Aufräumen
drop table
dbo.products
,dbo.prodlog
Hieraus lassen sich gedanklich die interessantesten Anwendungsmöglichkeiten konstruieren, aber leider erlauben die Einschränkungen, außer den Anwendungsfälle des Loggings/Auditing/Change Managements sowie die vereinfachte Bearbeitung von „Slowly changing dimensions“ im Zusammenhang mit MERGE als BI Thema, eigentlich nichts. (Da diese Einschränkungen sehr umfangreich sind, bitte in den BOL nachschlagen).
Der nächsten Artikel handelt von MERGE.
| Print article | This entry was posted by Christoph Ingenhaag on 15.10.08 at 19:54:55 . Follow any responses to this post through RSS 2.0. |