1

MSSQL Server 2008 データベースにストアド プロシージャがあり、Web サイトでのユーザー アクションに応答して多数の読み取りと書き込みを実行します。手順中に編集/作成された行数を、できればprocを変更せずに(変更は可能ですが)カウントする方法があるかどうかを知りたいです。誰か提案はありますか?私は見まし@@ROWCOUNTたが、それは読み取りと書き込みをカバーしています(そして、各UPDATEの後にprocを実行して手動でROWCOUNTを追加したくないです)

編集: proc は、System.Data.SqlClient クラスを使用して C# から呼び出されています。

4

4 に答える 4

1

MS Sql Profiler は、このような作業を開始する場所です。

于 2013-07-05T14:21:10.037 に答える
1

proc を編集せずに、SQL Server プロファイラー セッションを開始し、SP:StmtCompletedを追跡し、ObjectName を proc にフィルター処理し、TextData を監視するステートメントにフィルター処理することをお勧めします。RowCount 列を必ず含めてください。

拡張イベントsql_statement_completed イベントからは行数を取得できないことに注意してください。行数列はありません。期間、CPU、読み取りと書き込みだけです。

プロシージャを編集できる場合は、動作を完全に制御できます。すべての INSERT/UPDATE/DELETE 操作の@@ROWCOUNTを合計できます。このカウントは、出力パラメーターとして返されたり、ログに書き込まれたり、PRINT されたり、ユーザー定義のトレース イベントでトレースされたり、テーブルに保存されたりする可能性があります。

于 2013-07-05T15:38:41.673 に答える
1

@@ROWCOUNT は、最後の実行ステートメントに基づいてカウントを提供するため、ローカル変数を作成し、@@ROWCOUNT で毎回更新できます

それ以外の場合は、Profiler に入ってそこから監視する必要がありますが、それは持続可能なソリューションではなく、トラブルシューティングに適しています。

于 2013-07-05T14:33:34.260 に答える
0

MySQL についてはわかりませんが、Oracle SQL には SQL%ROWCOUNT という変数があり、これには直前のトランザクションで影響を受けた行数が含まれています。

于 2013-07-05T14:48:19.673 に答える