Ez egy jó dolog lesz.
Az OUTPUT kulcsszó már ismerős lehet 2005-ből, egy DML (INSERT, UPDATE, DELETE) művelet által érintett sorokat lehetett kipakolni tábla típusú változóba vagy lokális változókba.
A 2008-ban ezt tovább bővítették, így a kimenet bemenetként szolgálhat egy INSERT utasítás részére, azaz, össze lehet csövezni mindenféle átmeneti tábla nélkül a DML műveleteket. Innen a komponálható DML elnevezés.
Lássunk egy egyszerű példát:
create table t1(col1 int); create table t2(col1 int); insert into t1 values (1),(2),(3); insert into t2(col1) select col1 from (update t1 set col1 = col1 + 1 output inserted.col1) as d; select * from t2
col1 ----------- 2 3 4
Egyszerűen nevet kell adni az output kimentének, és máris táblaként kezelhetjük.
Bob barátunktól átemelek egy összetettebb auditálós példát:
CREATE TABLE Stock (Stock VARCHAR(10) PRIMARY KEY, Qty INT CHECK (Qty > 0)); CREATE TABLE Trades (Stock VARCHAR(10) PRIMARY KEY, Delta INT CHECK (Delta <> 0)); CREATE TABLE AuditChanges (Action varchar(6), Stock VARCHAR(6), Qty INT); GO INSERT Stock VALUES('MSFT', 10), ('BOEING', 5); INSERT Trades VALUES('MSFT', 5), ('BOEING', -5), ('GE', 3); GO INSERT INTO AuditChanges SELECT * FROM ( MERGE Stock S USING Trades T ON S.Stock = T.Stock WHEN MATCHED AND (Qty + T.Delta = 0) THEN DELETE WHEN MATCHED THEN UPDATE SET Qty += T.Delta WHEN NOT MATCHED THEN INSERT VALUES(Stock, T.Delta) OUTPUT $action, T.Stock, inserted.Qty ) tab (action, stock, qty); GO select * from AuditChanges
Action Stock Qty ------ ------ ----------- DELETE BOEING NULL INSERT GE 3 UPDATE MSFT 15
Aranyos. De azért tudni kell róla, hogy ez csak egy kezdemény még az SQL Serverben, v 0.1, majd a következő verziókban teljesítik ki. Nem használható csak INSERT-ben az eredmény, csak táblába tud beszúrni, view-ba nem, nem lehet a céltáblán trigger, nem lehet rajta fk vagy pk, nem dolgozhat replikációban. Kb. arra jó, amire a második példa is mutatja, logolni bizonyos műveleteket.
Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.