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

トランザクションによって挿入された行数を取得する方法

    @@ROWCOUNT は、last によって影響を受ける行数を示します SQL ステートメントの場合、問題のコマンドに続いてローカル変数にキャプチャするのが最善です。その値は、次にそれを見るときに変わるからです:

    DECLARE @Rows int
    DECLARE @TestTable table (col1 int, col2 int)
    INSERT INTO @TestTable (col1, col2) select 1,2 union select 3,4
    SELECT @[email protected]@ROWCOUNT
    SELECT @Rows AS Rows,@@ROWCOUNT AS [ROWCOUNT]
    

    出力:

    (2 row(s) affected)
    Rows        ROWCOUNT
    ----------- -----------
    2           1
    
    (1 row(s) affected)
    

    Rows を取得します 値は 2、挿入された行の数ですが、SELECT @[email protected]@ROWCOUNT コマンドは 1 行に影響を与えました

    トランザクションに複数の INSERT や UPDATE などがある場合、何が起こっているかを「カウント」する方法を決定する必要があります。テーブルごとに個別の合計、単一の総計値、またはまったく異なるものを持つことができます。追跡する合計ごとに変数を DECLARE し、それに適用される各操作の後に追加する必要があります。

    --note there is no error handling here, as this is a simple example
    DECLARE @AppleTotal  int
    DECLARE @PeachTotal  int
    
    SELECT @AppleTotal=0,@PeachTotal=0
    
    BEGIN TRANSACTION
    
    INSERT INTO Apple (col1, col2) Select col1,col2 from xyz where ...
    SET @[email protected][email protected]@ROWCOUNT
    
    INSERT INTO Apple (col1, col2) Select col1,col2 from abc where ...
    SET @[email protected][email protected]@ROWCOUNT
    
    INSERT INTO Peach (col1, col2) Select col1,col2 from xyz where ...
    SET @[email protected][email protected]@ROWCOUNT
    
    INSERT INTO Peach (col1, col2) Select col1,col2 from abc where ...
    SET @[email protected][email protected]@ROWCOUNT
    
    COMMIT
    
    SELECT @AppleTotal AS AppleTotal, @PeachTotal AS PeachTotal
    


    1. パラメータ化されたテーブル名

    2. ORA-00939を解決する方法:関数エラーの引数が多すぎますか?

    3. リモートSymfony2+Netbeansワークフロー(feat。git)

    4. 自己結合とランキングを必要とするSQL