2011-01-06 15 views
11

Mam tabeli z identyfikatorem autoIncrement że robieSQL Server tożsamości lista wkładki

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

Czy istnieje sposób dla mnie, aby uzyskać listę identyfikatorów, które zostały wstawione?

Myślałem, że mogę uzyskać maksymalny identyfikator przed wstawieniem, a następnie i zakładając, że wszystko pomiędzy nimi jest nowe, ale wtedy, jeśli rząd zostanie wstawiony z innego miejsca, mógłbym napotkać problemy. Czy istnieje odpowiedni sposób na zrobienie tego?

Używam SQL Server 2005

Odpowiedz

31

Używaj klauzula output.

DECLARE @InsertedIDs table(ID int); 

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

Świetnie! Zastanawiasz się, czy istnieją sposoby na zwrócenie tego @InsertedIDs do C#? – Icerman

+0

niesamowite !!! to mnie uratowało przed deklarowaniem kursora! – Alex

3

Tworzenie zmiennej table a następnie użyć klauzuli OUTPUT do zmiennej table.

OUTPUT inserted.NameOfYourColumnId INTO tableVariable

wtedy można SELECT od zmiennej table ty.