2012-01-24 19 views
12

Sto insertnig in una tabella utilizzando una selezioneè possibile inserire SQL utilizzando select restituire più identità?

INSERT california_authors (au_id, au_lname, au_fname) 
SELECT au_id, au_lname, au_fname 
FROM authors 
WHERE State = 'CA' 

dire che ho una colonna di identità in california_authors. Posso ottenere tutti gli ID inseriti dall'inserimento sopra riportato proprio come posso ottenere @@ IDENTITY per l'ultimo single insertion?

Non posso usare comando di selezione per california_authors come ci possono esiste precedentemente inserito record con filtro State = 'CA'

risposta

27

È possibile utilizzare la clausola output.

Qualcosa come questo se la tua colonna Identity è denominata "IdentityCol" restituirà id come set di risultati.

INSERT california_authors (au_id, au_lname, au_fname) 
OUTPUT inserted.IdentityCol 
SELECT au_id, au_lname, au_fname 
FROM authors 
WHERE State = 'CA' 

È possibile inserire i id ad una tabella utilizzando output ... into.
Ecco un esempio che memorizza gli ID in una variabile di tabella.

declare @IDs table (id int) 

INSERT california_authors (au_id, au_lname, au_fname) 
OUTPUT inserted.IdentityCol INTO @IDs 
SELECT au_id, au_lname, au_fname 
FROM authors 
WHERE State = 'CA' 
+0

Questo è fantastico .... grazie. – Umer

Problemi correlati