SqlSkull

SQL Server OUTPUT clauza returnează valorile fiecărui rând care a fost afectat de o inserare, actualizare sau ștergere declarații.

clauza de ieșire returnează o copie a datelor care pot fi inserate într-un tabel separat în timpul executării interogării.

această clauză este cel mai frecvent utilizată pentru a urmări modificarea datelor din tabel în scopul auditului.

clauza de ieșire oferă acces la două tabele virtuale așa cum este prezentat mai jos.

  1. inserat care conține noile rânduri (inserare sau actualizare)
  2. șters care conține copia veche a rândurilor (gol pentru inserare)

clauza de ieșire poate accesa toate coloanele din tabel, chiar și cele care nu fac parte din Instrucțiunea Insert .

sintaxă

---- for insertINSERT INTO tablename OUTPUT inserted . *INTO @output_tablenameVALUES (col_value1 ,col_value2 ,..) ---for delete DELETE FROM tablenameOUTPUT deleted.* INTO @output_tablename WHERE Condition 
să ne uităm la un exemplu , mai întâi vom crea un tabel numit ca element .
CREATE TABLE dbo.Item (ItemId Int identity(1,1),ItemName Varchar(20),ItemPurchasedDate Datetime)

utilizarea clauzei de ieșire cu instrucțiunea Insert

pentru a insera rezultatul clauzei de ieșire într-un tabel , declarați mai întâi o variabilă de tabel pentru a stoca rezultatul clauzei de ieșire și utilizați sintaxa caluse de ieșire pentru a stoca rezultatul în variabila tabelului .

pentru accesarea înregistrărilor inserate, Clauza de ieșire utilizează tabelul virtual inserat care conține noile rânduri.

în următoarea declarație, inserăm o înregistrare în tabelul de elemente și folosim clauza de ieșire pentru a stoca aceste înregistrări într-o variabilă de tabel @insert_log așa cum este prezentat mai jos

DECLARE @insert_log TABLE(ItemId Int, ItemName Varchar(20), ItemPurchasedDate Datetime )INSERT INTO dbo.Item OUTPUT inserted.ItemId, inserted.ItemName, inserted.ItemPurchasedDateINTO @insert_logVALUES ('Item1' , Getdate()) SELECT * FROM dbo.Item;SELECT * FROM @insert_log ;

după cum puteți vedea ieșirea tabelului de elemente și a variabilei tabelului, în timp ce introduceți înregistrări noi în tabelul de elemente, Itemid nu face parte din Instrucțiunea insert . Cu toate acestea, puteți accesa coloana ItemId din clauza de ieșire.

utilizarea ieșire caluse cu Declarație de actualizare

pentru accesarea înregistrărilor actualizate, puteți utiliza fie inserate sau șterse tabel virtual cu clauza de ieșire ca pe cerința dvs.

Dacă doriți să accesați o valoare veche care a fost înainte de actualizarea noii valori, atunci puteți utiliza tabelul virtual șters și dacă doriți să accesați valori noi actualizate, puteți utiliza tabelul virtual inserat cu clauza de ieșire.

în instrucțiunea următoare, actualizăm valoarea ItemName în tabelul de elemente și folosim clauza de ieșire pentru a stoca valorile vechi pentru acele înregistrări într-o variabilă de tabel @update_log.

pe măsură ce dorim să accesăm înregistrări vechi, folosim tabelul virtual șters.

DECLARE @update_log TABLE( ItemId int, ItemName Varchar(20), ItemPurchasedDate Datetime )UPDATE dbo.Item SET ItemName ='Item2'OUTPUT deleted.ItemId, deleted.ItemName, deleted.ItemPurchasedDateINTO @update_logWHERE ItemId =1SELECT * FROM dbo.Item;SELECT * FROM @update_log

după cum puteți vedea, aici avem trei ieșiri după cum urmează

1: este ieșirea tabelului înainte de actualizarea înregistrărilor.

2: este ieșirea tabelului după actualizarea înregistrărilor.

3: este ieșirea returnată de variabila de tabel care deține valorile înregistrărilor vechi care au fost înainte de actualizare.

Dacă doriți să accesați înregistrări noi, puteți utiliza tabelul virtual inserat în locul celor șterse.

Clauza de ieșire cu instrucțiunea Delete

următoarea instrucțiune utilizează interogarea delete pentru a șterge înregistrarea pentru ItemId= 1 din tabelul Item și pentru a stoca înregistrările șterse în variabila table folosind caluse Output .

pentru accesarea clauzei de ieșire a înregistrărilor șterse utilizați tabelul virtual șters care conține copia veche a rândurilor.

DECLARE @delete_log TABLE( ItemId Int, ItemName Varchar(20), ItemPurchasedDate Datetime )DELETE FROM dbo.Item OUTPUT deleted.ItemId, deleted.ItemName, deleted.ItemPurchasedDateINTO @delete_logWHERE ItemId =1SELECT * FROM dbo.Item;SELECT * FROM @delete_log

după cum puteți vedea , nu există date disponibile în tabelul de elemente, deoarece sunt șterse, dar inserțiile clauzei de ieșire care au șters înregistrările într-o variabilă de tabel @delete_log, care este foarte util pentru a urmări înregistrările șterse.

Recomandat pentru tine

SQL Server tabele temporale

822 vizualizări totale, 8 vizualizări astăzi

Related Posts

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *