2012-11-15 32 views
16

私はcsvファイルから(Webアプリケーションを介して)SQL Serverデータベースに多くのデータ行をインポートします。私は、自動生成されたid値をクライアントに返す必要があります。複数の挿入文を使用する場合、SCOPE_IDENTITYを使用する方法はありますか?

これをループで実行すると、パフォーマンスは非常に悪くなりますが、問題なくSCOPE_IDENTITY()を使用できます。

よりパフォーマンスソリューションは、このような方法だろう。

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

は、すべての生成されたIDだけではなく、最後の生成されたIDを取得する方法はありますか?

ありがとうございました!

敬具、 トルステン

+5

いいえ、 'SCOPE_IDENTITY()'はあなたに**最新の**挿入された 'IDENTITY'値のみを与えます。しかし、あなたはSQL Serverの 'OUTPUT'節をチェックすることができます.... –

+0

あなたの削除された答えにコメントする:私はあなたが最初の行を削除し、' sqlBuilder.Append( "OUTPUT INSERTED.autoid" ); '。クライアントコードに出力したい場合は、出力をテーブル変数に入れる必要はありません。 –

答えて

33

いいえ、SCOPE_IDENTITY()だけで、あなたに1、最新の挿入IDENTITY値を与えます。しかし、あなたは

あなた INSERTステートメントを実行したら
DECLARE @IdentityTable TABLE (SomeKeyValue INT, NewIdentity INT) 

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

、テーブル変数は、(あなたのために、行を識別するために)「いくつかのキー値」と、新たに挿入されたID値のために保持します.... check out the OUTPUT clause of SQL Serverできました各行が挿入されます。今これで夢中になる! :-)

+0

ありがとう、私はそれを試してみます。 –

+0

複数のユーザーが同じテーブルで作業する場合、他のユーザーのIDが間違っている可能性はありますか? –

+0

@ThorstenKraus:いいえ、各トランザクションは独自の値しか返しません –

関連する問題