sql >> データベース >  >> RDS >> Sqlserver

SQL Server-挿入された行のIDを取得する最良の方法は?

    • @@IDENTITY すべてのスコープにわたって、現在のセッションの任意のテーブルに対して生成された最後のID値を返します。 ここでは注意が必要です 、スコープを超えているため。現在のステートメントの代わりに、トリガーから値を取得できます。

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

    • IDENT_CURRENT('tableName') 任意のセッションおよび任意のスコープで特定のテーブルに対して生成された最後のID値を返します。これにより、上記の2つが必要なものではない場合に備えて、値を取得するテーブルを指定できます(非常にまれ )。また、@ Guy Starbuckが述べたように、「レコードを挿入していないテーブルの現在のIDENTITY値を取得する場合は、これを使用できます。」

    • OUTPUT INSERTの句 ステートメントを使用すると、そのステートメントを介して挿入されたすべての行にアクセスできます。特定のステートメントを対象としているため、より簡単です 上記の他の機能より。ただし、少しより冗長です (テーブル変数/一時テーブルに挿入してからクエリを実行する必要があります)。ステートメントがロールバックされるエラーシナリオでも結果が得られます。とはいえ、クエリで並列実行プランを使用している場合、これは唯一の保証された方法です。 アイデンティティを取得するため(並列処理をオフにする以外)。ただし、に実行されます トリガーであり、トリガーによって生成された値を返すために使用することはできません。



    1. フィジカルスタンバイのORA-01264

    2. 今日の(深夜以降の)タイムスタンプのみを選択します

    3. Oracle:行が存在しない場合に挿入する方法

    4. oracle PL / SQLIPv6cidrの範囲IPを計算する方法