2012-11-15 23 views
16

Çok sayıda veri satırını bir csv dosyasından bir SQL Server veritabanına (bir web uygulaması aracılığıyla) aktaracağım. İstemci için otomatik olarak üretilen id değerine ihtiyacım var.Çoklu ek ifadesi kullanılıyorsa SCOPE_IDENTITY kullanmanın bir yolu var mı?

Bunu bir döngüde yaparsam, performans çok kötüdür (ancak SCOPE_IDENTITY()'u sorunsuz kullanabilirim).

INSERT INTO [MyTable] 
VALUES ('1'), ('2'), ('3') 
SELECT SCOPE_IDENTITY() 

Oluşturulmuş tüm kimlikleri almak için herhangi bir yolu var mı ve sadece son oluşturulan id:

Daha performanslı bir çözüm böyle bir yolu olurdu?

Yardımlarınız için teşekkürler!

Saygılarımızla, Thorsten

+5

Hayır, 'SCOPE_IDENTITY()' sadece ** bir, en son ** eklenen 'IDENTITY' değerini verir. Ancak, SQL Server'ın OUTPUT işlevini gözden geçirebilirsiniz .... –

+0

Silinen yanıtınıza yorum yapın: İlk satırı kaldırmanız ve üçüncü satırı 'sqlBuilder.Append (" OUTPUT INSERTED.autoid ") olarak değiştirmelisiniz.); '. Çıktının istemci kodunuza girmesini istiyorsanız, çıktıyı bir tablo değişkenine koymanıza gerek yoktur. –

cevap

33

Hayır, SCOPE_IDENTITY() size sadece biri son eklenen IDENTITY değerini verir. Ama

size INSERT deyimini çalıştırmak sonra
DECLARE @IdentityTable TABLE (SomeKeyValue INT, NewIdentity INT) 

INSERT INTO [MyTable] 
OUTPUT Inserted.Keyvalue, Inserted.ID INTO @IdentityTable(SomeKeyValue, NewIdentity) 
VALUES ('1'), ('2'), ('3') 

, masa değişken (sizin için, satırı tanımlamak için) "Bazı anahtar değeri" ve yeni eklenen ID değerleri için yapacak .... check out the OUTPUT clause of SQL Server olabilir her satır eklendi. Şimdi bununla çıldırın! :-)

+0

Teşekkürler Ben deneyeceğim. –

+0

Birden fazla kullanıcı aynı masada çalışıyorsa herhangi bir risk var mı? (Diğer kullanıcıların) yanlış kimlikleri olabilir mi? –

+0

@ThorstenKraus: Hayır, her işlem yalnızca kendi değerlerini alır –

İlgili konular