2

SQL Server では、バッチ更新を使用して複数のレコードをテーブルに挿入しています。バッチ更新後に作成される ID (一意の主キー) を取得するにはどうすればよいですか?

1 つのレコードを挿入すると、 を使用して最後に挿入されたレコードを取得できますIDENT(tableName)。バッチ更新を行った場合の取得方法がわかりません。助けてください。

たとえば、ROLE NO と NAME を持つ学生テーブルがあります。ROLE NO は、Java プログラムを使用して名前を DB に挿入するとすぐに、1 ずつ自動的にインクリメントされます。Java コードからのバッチ更新を使用して、一度に 3 行を追加します。DB では、ROLE NO 2、3、および 4 で追加されます。Java プログラムでこれらの新しく生成された ID を取得するにはどうすればよいですか。助けてください。

executebatch を実行した後、get generatedkeys メソッドを使用して ID を取得しようとしました。例外が発生します。バッチ更新 + 生成されたキーの取得はサポートされていますか?

4

2 に答える 2

3

SQL Server では、挿入を行うときにクエリに追加のオプションがあります。OUTPUT. これにより、テーブルに挿入したデータ (ID を含む) を取り戻すことができます。それらを一時テーブルに挿入する必要があります。このようなもの(テーブル/列名を使用すると、そこにたどり着きます。

declare @MyNewRoles Table (Name, RoleNo)

insert into tblMyTable
(Name)
Select
    Name
Output
    inserted.Name, Inserted.RoleNo
    into @MyNewRoles
From tblMyTableOfNames

select * from @MyNewRoles
于 2014-05-29T05:36:46.150 に答える
1

テーブルにフィールドを追加してもかまわない場合は、バッチ トランザクションごとに一意の ID (ランダムな UUID など) を生成し、それをテーブルにも格納できます。次に、特定のトランザクションに関連付けられた ID を見つけるには、次のようなものが必要です。

select my_id from my_table where batch_id = ?
于 2014-05-29T05:43:26.650 に答える