SQL Server データベースに挿入した後に最新の ID を取得します
データベースにデータを挿入した後、多くの場合、最後に挿入されたレコードの ID を取得する必要があります。シナリオを見てみましょう。aspnet_GameProfiles テーブルに行を挿入した後、自動的にインクリメントされる GamesProfileId を取得する必要があります。
次のコード スニペットは INSERT ステートメントを実行しますが、新しく生成された GamesProfileId をキャプチャするメカニズムがありません。これを実現するために、使用されている SQL Server のバージョンに基づいてさまざまな方法を検討します。
SQL Server 2005 以降 (挿入トリガーなし)
SQL Server 2005 以降の場合、aspnet_GameProfiles テーブルに挿入トリガーが定義されていない場合は、INSERT ステートメントを変更して OUTPUT 句を含めることができます。
<code class="language-sql">INSERT INTO aspnet_GameProfiles(UserId,GameId) OUTPUT INSERTED.ID VALUES(@UserId, @GameId)</code>
これにより、挿入された ID がクエリの出力として自動的に返されます。次のコードを使用して取得できます:
<code class="language-csharp">SqlCommand myCommand = new SqlCommand(insertSql, myConnection); ... SqlDataReader reader = myCommand.ExecuteReader(); reader.Read(); Int32 newId = reader.GetInt32(0);</code>
SQL Server 2000 または挿入トリガー
SQL Server 2000 を使用している場合、またはテーブルに挿入トリガーがある場合は、SCOPE_IDENTITY() 関数を使用できます。
<code class="language-sql">INSERT INTO aspnet_GameProfiles(UserId,GameId) VALUES(@UserId, @GameId); SELECT SCOPE_IDENTITY()</code>
クエリの実行後、次のコードを使用して、最後に挿入された ID を取得できます:
<code class="language-csharp">SqlCommand myCommand = new SqlCommand(insertSql, myConnection); ... Int32 newId = (Int32) myCommand.ExecuteScalar();</code>
これらの手法を使用すると、最後に挿入された GamesProfileId を効率的に取得できるため、それをアプリケーションで後続の挿入やその他の操作に使用できるようになります。
以上がSQL Server へのデータベース挿入後に最後に挿入された ID を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。