2012-01-16 19 views
5

Sto utilizzando SQL Server 2008 per creare una procedura.Ottieni valori colonna identità su INSERT

Sto usando la seguente istruzione SQL per inserire in una tabella di controllo

insert into Listuser 
(
    UserID, 
    ListID, 
    AuditCreated 
) 
    select 
    UserID, 
    ListID, 
    GETDATE() 
from ListUser where Surname='surname' 

Sto usando scope_identity() per ottenere la colonna di identità dalla tabella LISTUSER e inserire la colonna di identità ad un altro tavolo log

Se l'istruzione select contiene più di un valore, come ottenere il valore dell'identità di entrambe le colonne e inserirlo nella tabella dei log?

Thanjs

risposta

12

Se è necessario catturare più valori di identità in corso di inserimento, mi piacerebbe utilizzare la clausola OUTPUT:

Questo inserirà tutte le righe nella vostra tabella ListUser, e il risultato sarà tutto identità generati da questo inserire nella variabile @TableOfIdentities tavolo

Read more about the OUTPUT clause on MSDN

Questi valori sono inseriti nella variabile di tabella, ed è possibile selezionare da quel variabile di tabella dopo l'inserto, e fare tutto ciò che devi fare con loro:

SELECT * FROM @TableOfIdentities 

Aggiornamento: l'uso del la variabile di tabella qui è solo un esempio: ovviamente puoi anche inviare i dati in una tabella "normale" in SQL Server e puoi anche generare più valori per ogni riga inserita, se necessario, in modo da avere qualcosa di simile :

INSERT INTO dbo.Listuser(UserID, ListID, AuditCreated) 
    OUTPUT Inserted.ID, Inserted.UserID, Inserted.SurName, GETDATE() 
     INTO AuditTable(IdentValue, UserID, Surname, InsertDate) 
    SELECT 
     UserID, ListID, GETDATE() 
    FROM 
     dbo.ListUser 
    WHERE 
     Surname = 'surname' 
+0

possiamo aggiungere direttamente alla tabella permanente – user386258

+1

@ user3862 58: Possiamo, ma ci sono alcune restrizioni come le cose che il tavolo di destinazione non può avere. Leggi l'articolo collegato da marc_s per maggiori dettagli. –

+0

@ marc_s, posso inserire l'id direttamente nella tabella permanente (tabella dei registri) invece della variabile di tabella – user386258

Problemi correlati