0

私はmsdnで次の行を調べました。

"@@IDENTITYそしてSCOPE_IDENTITY、現在のセッションの任意のテーブルで生成された最後のID値を返します。

ただし、SCOPE_IDENTITY現在のスコープ内でのみ値を返します。

@@IDENTITY特定の範囲に限定されない」

だから私の質問は上記の行の「current sessionとは何か」です。current scope

前もって感謝します。

4

2 に答える 2

1

挿入したばかりの値を返したい場合(子テーブルへの挿入に使用するため)、通常はscope _identity()を使用する必要があります。これは、接続が実行したステートメントの範囲に固有です。それはあなたに他の誰かのアイデンティティの価値を与えることはありません。

@@ identiyもスコープに固有ですが、スコープにトリガー値も含まれているため、テーブルにIDに挿入されるトリガーがある場合は、IDが返されます。そのため、誰かがトリガーを追加するとすぐに摩耗した値を返し始めるため、@@identityを使用して挿入した値を返すことはできません。

次に、ident_currentがあります。これは、最後のIDをどの接続に入れても、テーブルを再調整するため、すべての中で最も危険です。したがって、これを使用してID値を取得する場合は、接続の記録に関連する必要がないことに注意する必要があります。これを挿入して使用し、子テーブルへの挿入に使用するIDを取得することで、データの整合性の問題が保証されます。

新しいバージョンのSQLサーバーにはOUTPUT句があります。これは、IDのセットと他のフィールドの値も返すことができるため、上記の3つの項目のいずれかを使用するよりもはるかに優れています。

于 2013-04-16T15:36:26.210 に答える
-2

@@ IDENTITYのスコープは現在のセッションに制限されていますが、SCOPE_IDENTITY()はサーバーのすべてのセッションにスコープを持っています

于 2012-12-12T12:29:41.850 に答える