35

テーブルに挿入するデータがたくさんあります。この問題は、主キーをそのテーブルに返す必要があることです。次のようなものがあるかどうかはわかりませんでした:

 insert into TABLE (...) values (...) RETURNING p_key

また

 select p_key from (insert into TABLE (...) values (...))

私はブラウザと保存された情報の回避策を作成しています。これは多かれ少なかれ行を追加してから更新します...しかし、主キーがなければ、参照がないため更新する方法がありません。

私はオンラインで探していて、グーグルでいくつかの例を見つけましたが、これらの例で少し混乱しました.

http://en.wikipedia.org/wiki/Insert_(SQL)#Retrifying_the_key

http://www.daniweb.com/web-development/databases/ms-sql/threads/299356/returning-identity-of-last-inserted-row-uniqueidentifier

ウィキペディアは、SQL Server 2008OUTPUTの代わりに使用するために、次のRETURNINGようなものを使用できると言っていたOUTPUT p_key

4

5 に答える 5

47

行全体を挿入する場合は、 を選択してSCOPE_IDENTITY()もうまくいきません。またSCOPE_IDENTITY、(数値)ID列でのみ機能します-PKが他のものである場合があります...

しかし、SQL ServerにはこのOUTPUT句があり、 MSDN で十分に文書化されています。

INSERT INTO dbo.Table(columns)
OUTPUT INSERTED.p_key, INSERTED.someothercolumnhere .......
VALUES(...) 

これらの値は、呼び出し元のアプリに「エコー」されます。たとえば、SQL Server Management Studio のグリッドに値が表示されるか、このINSERTステートメントを呼び出す C# または VB.NET から結果セットとして読み取ることができます。

于 2012-08-22T20:35:21.873 に答える
14

Scope_Identity()「主キー」が「アイデンティティ」を意味すると仮定すると、あなたが望むものです

declare @id int 
insert yourtable values (some, values)
select @id = Scope_Identity()
于 2012-08-22T19:46:30.943 に答える
5

ではC#、SQL ステートメントを記述した直後にSELECT SCOPE_IDENTITY();、コードは次のようになります。

insert into TABLE (...) values (...); SELECT SCOPE_IDENTITY();

次に、代わりに をexecuteNonQuery使用しますexecuteScalar

それでうまくいくはずです!

于 2012-08-22T19:48:49.893 に答える
1

挿入を実行した後、次のクエリを実行します。

select scope_identity()

最後に挿入された主キーを取得します。

于 2012-08-22T19:47:29.073 に答える