17

I have a table with an autoincrement id that I am doing a

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

Is there a way for me to get the list of id's that have been inserted?

I was thinking I could get the max id before the insert then after and assuming everything in between is new, but then if a row gets inserted from somewhere else I could run into problems. Is there a proper way to do this?

I am using SQL Server 2005

marc_s
  • 704,970
  • 168
  • 1,303
  • 1,425
Kyle
  • 16,774
  • 30
  • 128
  • 237

2 Answers2

45

Use the output clause.

DECLARE @InsertedIDs table(ID int);

INSERT INTO YourTable
    OUTPUT INSERTED.ID
        INTO @InsertedIDs 
    SELECT ...
Joe Stefanelli
  • 128,689
  • 18
  • 228
  • 231
3

Create a table variable and then use the OUTPUT clause into the table variable.

OUTPUT inserted.NameOfYourColumnId INTO tableVariable

Then you can SELECT from your table variable.

Neil Knight
  • 45,890
  • 23
  • 126
  • 186