2012-03-10 1 views
0

SQLサーバーでは、IDがintのint型のテーブルを作成し、2番目はname varcharです。挿入するためのprocを作成し、レコードを挿入した後にステートメントに書き込みます。 @identityは動作していますが、不思議なことに@@アイデンティティはより多くの行を表示していますが、テーブルには多くのレコードにはレコードが少ないことがあります。私のprocはSQL ServerのIDですか?

 alter proc usp_test123 
     as begin 
     set nocount on; 
      insert into test123 values('sasi') 
      select @@IDENTITY 
      end 
+2

質問を再読してください。それは意味がありません。 –

答えて

4

あなたはテーブルに8行しかないのですが、返されたIDが10であることを意味しますか?

identityカラムは連続しているとは限りません。行が削除されたり、挿入を行っているトランザクションがロールバックされたりすると、シリーズ内に番号が見つからなくなります。

@@IDENTITYの代わりにSCOPE_IDENTITY()を使用してください。 @@IDENTITYは、挿入された最新の行のIDを返します。挿入するテーブルにトリガがある場合、トリガによって挿入された最新の行が取得されます。 SCOPE_IDENTITY()は、同じコードスコープで生成された最新のIDを取得します。

+0

okありがとう、アンダーズ、明確な説明はありますか –

+0

はい、そうです。 –

関連する問題