3

asp.netアプリケーションのバックエンドとしてSQLServerがあります。複数の人が同じテーブルに「同時に...」データを挿入する可能性があります。

この投稿から解決策/回答を読んだとき:scope_identity vs ident_current

Ident_current次に、別のユーザーの挿入のIDを取得できるため、使用しないでください。

ただし、を使用Select Scope_Identity();するとNULLがSelect IDENT_CURRENT('tableName')返され、SQL ServerManagementStudioで確認した正しいIDが返されます。

内で行う挿入ステートメントSqlTransactionSelect IDENT_CURRENT('tableName')トランザクションの後に行われます。

何が間違っていますか?

更新

基本クラスによって動的に一緒に構築される私の挿入ステートメント:

INSERT INTO TEST (NAME) VALUES (@Name)

コマンドのパラメータコレクションの値は「xxx」で、すべてがテーブルに正常に挿入されています。

SqlDataReaderC#だけでストアドプロシージャを使用することはありません。

commandText = "INSERT INTO TEST (NAME) VALUES ('Test1');Select Scopy_Identity();"

上記のステートメントを実行している最後のautoincidを取得するにはどうすればよいですか?また、上記を呼び出すExecuteNonQuery必要ExecuteReaderがありINSERTますSELECT

4

2 に答える 2

19

IDENT_CURRENT任意のセッションおよび任意のスコープで特定のテーブルに対して生成された最後のID値を返します。

@@IDENTITYすべてのスコープにわたって、現在のセッションの任意のテーブルに対して生成された最後のID値を返します。

SCOPE_IDENTITY現在のセッションおよび現在のスコープ内の任意のテーブルに対して生成された最後のID値を返します。

于 2012-09-30T12:39:04.987 に答える
5

OUTPUT句(Transact-SQL)を使用するだけで、データを挿入し、同じステートメントですべての(複数の)IDを選択して戻すことができます。

INSERT INTO TEST (NAME) OUTPUT INSERTED.YourIdentity VALUES (@Name)

実例:

DECLARE @YourTable table (YourIdentity int identity(1,1) primary key, YourCol1 varchar(5))

INSERT INTO @YourTable (YourCol1) OUTPUT INSERTED.YourIdentity VALUES ('ABC')

出力:

YourIdentity
------------
1

(1 row(s) affected)
于 2012-02-21T21:39:28.097 に答える