私はmsdnで次の行を調べました。
"@@IDENTITY
そしてSCOPE_IDENTITY
、現在のセッションの任意のテーブルで生成された最後のID値を返します。
ただし、SCOPE_IDENTITY
現在のスコープ内でのみ値を返します。
@@IDENTITY
特定の範囲に限定されない」
だから私の質問は上記の行の「current session
とは何か」です。current scope
前もって感謝します。
私はmsdnで次の行を調べました。
"@@IDENTITY
そしてSCOPE_IDENTITY
、現在のセッションの任意のテーブルで生成された最後のID値を返します。
ただし、SCOPE_IDENTITY
現在のスコープ内でのみ値を返します。
@@IDENTITY
特定の範囲に限定されない」
だから私の質問は上記の行の「current session
とは何か」です。current scope
前もって感謝します。
挿入したばかりの値を返したい場合(子テーブルへの挿入に使用するため)、通常はscope _identity()を使用する必要があります。これは、接続が実行したステートメントの範囲に固有です。それはあなたに他の誰かのアイデンティティの価値を与えることはありません。
@@ identiyもスコープに固有ですが、スコープにトリガー値も含まれているため、テーブルにIDに挿入されるトリガーがある場合は、IDが返されます。そのため、誰かがトリガーを追加するとすぐに摩耗した値を返し始めるため、@@identityを使用して挿入した値を返すことはできません。
次に、ident_currentがあります。これは、最後のIDをどの接続に入れても、テーブルを再調整するため、すべての中で最も危険です。したがって、これを使用してID値を取得する場合は、接続の記録に関連する必要がないことに注意する必要があります。これを挿入して使用し、子テーブルへの挿入に使用するIDを取得することで、データの整合性の問題が保証されます。
新しいバージョンのSQLサーバーにはOUTPUT句があります。これは、IDのセットと他のフィールドの値も返すことができるため、上記の3つの項目のいずれかを使用するよりもはるかに優れています。
@@ IDENTITYのスコープは現在のセッションに制限されていますが、SCOPE_IDENTITY()はサーバーのすべてのセッションにスコープを持っています