2011-01-06 17 views
11

Ho una tabella con un ID autoincrement che sto facendo undelle identità inserto

INSERT INTO (...) SELECT ... FROM ... 

C'è un modo per me per ottenere l'elenco di id che sono stati inseriti?

Stavo pensando che avrei potuto ottenere l'ID max prima dell'inserto e dopo aver assunto che tutto ciò che c'era tra di essi fosse nuovo, ma poi se una riga viene inserita da qualche altra parte potrei incorrere in problemi. C'è un modo corretto per farlo?

Sto usando SQL Server 2005

risposta

31

utilizzare la clausola output.

DECLARE @InsertedIDs table(ID int); 

INSERT INTO YourTable 
    OUTPUT INSERTED.ID 
     INTO @InsertedIDs 
    SELECT ... 
+0

Grande! Ti chiedi se ci sono modi per restituire questo @InsertedIDs a C#? – Icerman

+0

fantastico !!! questo mi ha salvato dal dichiarare un cursore! – Alex

3

creare una variabile table e quindi utilizzare la clausola OUTPUT nella variabile table.

OUTPUT inserted.NameOfYourColumnId INTO tableVariable

Poi si può SELECT dalla variabile table.