INSERT
、UPDATE
およびDELETE
データベースに対して直接実行されるSQLステートメントの場合、ほとんどのデータベースプロバイダーは、影響を受ける行の数を返します。ストアドプロシージャの場合、影響を受けるレコードの数は常に-1
です。
ストアドプロシージャの影響を受けるレコードの数を取得するにはどうすればよいですか?
INSERT
、UPDATE
およびDELETE
データベースに対して直接実行されるSQLステートメントの場合、ほとんどのデータベースプロバイダーは、影響を受ける行の数を返します。ストアドプロシージャの場合、影響を受けるレコードの数は常に-1
です。
ストアドプロシージャの影響を受けるレコードの数を取得するにはどうすればよいですか?
回答:
@@RowCount
SQLステートメントの影響を受けるレコードの数がわかります。
@@RowCount
あなたが直後にそれを発行する場合にのみ機能します。したがって、エラーをトラップしている場合は、同じ行で実行する必要があります。あなたがそれを分割するならば、あなたはあなたが2番目に置いたものを逃すでしょう。
SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR
複数のステートメントがある場合は、それぞれに影響を受ける行の数を取得して、それらを合計する必要があります。
SELECT @NumRowsChanged = @NumRowsChanged + @@ROWCOUNT, @ErrorCode = @@ERROR
私のために判明SET NOCOUNT ON
(SQL Server Management Studioのデフォルトではオン)ストアドプロシージャスクリプトで設定としてSqlCommand.ExecuteNonQuery();
常に返さ-1。
私はそれをオフに設定しました:SET NOCOUNT OFF
を使用する必要はありません@@ROWCOUNT
。
警告:変更されるテーブルにトリガーがアタッチされている場合、偽のデータ@@ROWCOUNT
が返される可能性があります。
@@ROWCOUNT
TRIGGER、実際の文によって影響を受けるレコードの数を返します!