SqlSkull

SQL Server OUTPUT clause restituisce i valori di ogni riga interessata da istruzioni INSERT, UPDATE o DELETE.

La clausola Output restituisce una copia dei dati che possono essere inseriti in una tabella separata durante l’esecuzione della query.

Questa clausola è più comunemente utilizzata per tenere traccia della modifica dei dati nella tabella a scopo di audit.

La clausola OUTPUT dà accesso a due tabelle virtuali come indicato di seguito.

  1. INSERITO che contiene le nuove righe (INSERT o UPDATE)
  2. CANCELLATO che contiene la vecchia copia delle righe (vuota per INSERT)

La clausola OUTPUT può accedere a tutte le colonne della tabella, anche quelle che non fanno parte dell’istruzione Insert .

SINTASSI

---- for insertINSERT INTO tablename OUTPUT inserted . *INTO @output_tablenameVALUES (col_value1 ,col_value2 ,..) ---for delete DELETE FROM tablenameOUTPUT deleted.* INTO @output_tablename WHERE Condition 
Diamo un’occhiata a un esempio , prima creiamo una tabella denominata come Elemento .
CREATE TABLE dbo.Item (ItemId Int identity(1,1),ItemName Varchar(20),ItemPurchasedDate Datetime)

Utilizzando la clausola Output con Insert

Per inserire la clausola output risultato in una tabella , Prima di dichiarare una variabile di tabella per memorizzare il risultato di clausola output ,e utilizzare l’uscita caluse sintassi per memorizzare il risultato in una variabile di tabella .

Per accedere ai record inseriti, la clausola Output utilizza la tabella virtuale inserita che contiene le nuove righe.

Nel seguente dichiarazione: possiamo inserire un record nella tabella Articolo e utilizzare la clausola output per memorizzare i record in una tabella variabile @insert_log, come indicato di seguito.

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 ;

Come si può vedere il risultato di un Elemento della tabella e tabella variabile, Durante l’inserimento di nuovi record in tabella articolo, ItemId non è parte dell’istruzione insert . Tuttavia, è possibile accedere alla colonna ItemId nella clausola OUTPUT.

Utilizzando l’output caluse con l’istruzione Update

Per accedere ai record aggiornati, è possibile utilizzare la tabella virtuale inserita o eliminata con la clausola output secondo le proprie esigenze.

Se si desidera accedere a un vecchio valore che era prima di aggiornare il nuovo valore, è possibile utilizzare la tabella virtuale eliminata e se si desidera accedere a nuovi valori aggiornati, è possibile utilizzare la tabella virtuale inserita con la clausola di output.

Nella seguente istruzione, aggiorniamo il valore ItemName nella tabella Item e usiamo la clausola output per memorizzare i vecchi valori per quei record in una variabile di tabella @update_log.

Poiché vogliamo accedere ai vecchi record, usiamo la tabella virtuale eliminata.

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

Come puoi vedere, qui abbiamo tre output come segue

1: È l’output della tabella prima di aggiornare i record.

2: È l’output della tabella dopo l’aggiornamento dei record.

3: È l’output restituito dalla variabile table che contiene i vecchi valori dei record che erano prima dell’aggiornamento.

Se si desidera accedere a nuovi record, è possibile utilizzare la tabella virtuale inserita al posto di deleted.

Clausola di output con l’istruzione Delete

La seguente istruzione utilizza la query delete per eliminare il record per ItemId= 1 dalla tabella Item e memorizzare i record eliminati nella variabile table utilizzando l’Output caluse .

Per accedere alla clausola output dei record eliminati utilizzare la tabella virtuale eliminata che contiene la vecchia copia delle righe.

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

Come potete vedere , non C’è nessun dato disponibile punto tabella che viene eliminato, ma la clausola output inserti eliminati i record in una tabella variabile @delete_log, che è molto utile per tenere traccia dei record cancellati.

Consigliato per te

Tabelle temporali di SQL Server

822 visualizzazioni totali, 8 visualizzazioni oggi

Related Posts

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *