2011-01-10 10 views
6

Witam
Zamierzam wstawić 10 wierszy za jednym razem za pomocą jednego TSQL, który jest dostępny w SQL Server 2008. Chcę, aby IDENTYFIKACJA wstawionych wierszy. Myślę, że poniżej rozwiązanie będzie działać, ale nie jestem pewien, czy jakiś inny wstawiania się dzieje, gdy im prowadzenie poprzednią wprowadzenie wpłynęłoby na wynikUzyskaj tożsamość wielokrotnego wstawienia w serwerze sql 2008

INSERT INTO tableA VALUES (1,2), (3,4), (4,5), ....
DECLARE @LastID INT = @@IDENTITY
SELECT TOP(10) ID FROM tableA WHERE ID<[email protected] ORDER BY ID DESC

Odpowiedz

14

Wystarczy użyć OUTPUT clause - może albo powrócić wyjście do wniosku, lub do zmiennej tabeli do dalszej pracy.

E.g. zapytanie będzie:

INSERT INTO tableA 
OUTPUT inserted.ID 
VALUES (1,2), (3,4), (4,5), ... 
15

Można użyć OUTPUT klauzuli:

DECLARE @tablevar table (ID int); 

INSERT INTO tableA 
OUTPUT INSERTED.ID INTO @tablevar 
VALUES (1,2), (3,4), (4,5), .... 
+0

Wspaniała odpowiedź, dokładnie to, czego potrzebuję, ale jest to możliwe, aby uniknąć temp tabeli? – Ehsan

+1

@ Ehsan - po prostu pomiń część 'INTO @ MyTableVar'. –

+0

@ Ehan: czy mogę zaproponować, abyś zaakceptował odpowiedź Damiena. –

Powiązane problemy