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が返される可能性があります。
@@ROWCOUNTTRIGGER、実際の文によって影響を受けるレコードの数を返します!