トレースにフィルタを適用します。sp_trace_setfilter は、現在停止している (status が 0) 既存のトレースに対してみ実行できます。存在しないトレース、または status が 0 以外のトレースに対してこのプロシージャを実行すると、SQL Server 2000 ではエラーが返されます。
構文
sp_trace_setfilter [ @traceid = ] trace_id
, [ @columnid = ] column_id
, [ @logical_operator = ] logical_operator
, [ @comparison_operator = ] comparison_operator
, [ @value = ] value
引数
[ @traceid = ] trace_id
フィルタを設定するトレースの ID です。trace_id は int であり、既定値はありません。ユーザーは、この trace_id 値を使用してトレースの識別、変更、および制御を行います。
[ @columnid = ] column_id
フィルタを適用する列の ID です。column_id は int であり、既定値はありません。column_id が NULL である場合、指定したトレースのすべてのフィルタが消去されます。
[ @logical_operator = ] logical_operator
AND (0) または OR (1) 演算子を適用するかどうかを指定します。logical_operator は int であり、既定値はありません。
[ @comparison_operator = ] comparison_operator
実行する比較演算の種類を指定します。comparison_operator は int であり、既定値はありません。次の表は、比較演算子とそれぞれを表す値の一覧です。
| 値 | 比較演算子 |
| 0 | = (等しい) |
| 1 | <> (等しくない) |
| 2 | > (より大きい) |
| 3 | < (より小さい) |
| 4 | >= (以上) |
| 5 | <= (以下) |
| 6 | LIKE |
| 7 | NOT LIKE |
[ @value = ] value
フィルタの対象となる値を指定します。value のデータ型は、フィルタを実行する列のデータ型と一致している必要があります。したがって、フィルタを int 型の Object ID 列に設定する場合、value は int でなければなりません。.NULL 値や空の文字列は使用できません。イベントに対して列の値が NULL である場合、その列に定義されているすべてのフィルタは無視されます。value が nvarchar または varbinary である場合、その長さの最大値は 8000 です。
比較演算子が LIKE または NOT LIKE である場合は、"%" やその LIKE 演算に合ったほかのフィルタを論理演算子に含めることができます。
ある範囲内の列の値にフィルタを適用するには、sp_trace_setfilter を 2 回実行する必要があります。'>=' と '<=' の各比較演算子で 1 回ずつ実行します。
戻り値
次の表は、このストアド プロシージャの完了時の戻り値 (コード) の一覧です。
| リターン コード | 説明 |
| 0 | エラーはありません。 |
| 1 | 不明なエラーです。 |
| 2 | トレースは現在実行中です。この時点でトレースを変更すると、エラーが発生します。 |
| 4 | 指定した列は無効です。 |
| 5 | 指定した列ではフィルタを実行できません。この値は、sp_trace_setfilter からのみ返されます。 |
| 6 | 指定した比較演算子は無効です。 |
| 7 | 指定した論理演算子は無効です。 |
| 9 | 指定したトレース ハンドルは無効です。 |
| 13 | メモリが足りません。指定した操作を実行するために十分なメモリがない場合に返されます。 |
| 16 | 関数がこのトレースに対して無効です。 |
解説
sp_trace_setfilter は Microsoft® SQL Server™ 2000 のストアド プロシージャで、以前のバージョンの SQL Server では拡張ストアド プロシージャで実行されていた多くの操作を実行します。トレースのフィルタを作成、適用、削除、または操作するには、xp_trace_set*filter 拡張プロシージャの代わりに sp_trace_setfilter を使用します。詳細については、「」を参照してください。
特定の列の複数のフィルタはすべて、sp_trace_setfilter の 1 回の実行で同時に有効にする必要があります。たとえば、ユーザーがアプリケーション名の列に 2 つのフィルタを適用し、ユーザー名の列に 1 つのフィルタを適用する場合は、アプリケーション名のフィルタを続けて指定する必要があります。ユーザーが、アプリケーション名のフィルタのいずれかを 1 回のストアド プロシージャ呼び出しで指定し、続けてユーザー名のフィルタ、アプリケーション名のもう 1 つのフィルタの順に指定すると、エラーが返されます。
すべての SQL Trace ストアド プロシージャ (sp_trace_xx) のパラメータでは、データ型が厳密に定義されています。これらのパラメータを、引数の説明で指定されている正しいデータ型で呼び出されないと、このストアド プロシージャはエラーを返します。
権限
sp_trace_setfilter を実行できるのは、固定サーバー ロール sysadmin のメンバだけです。
例
この例では、トレース 1 に 3 つのフィルタを設定します。N'SQLT%' と N'MS%' の 2 つのフィルタは、"LIKE" 比較演算子を使用して 1 つの列 (AppName、値 10) に対して適用されます。フィルタ N'joe' は、"EQUAL" 比較演算子を使用して別の列 (UserName、値 11) に適用されます。
sp_trace_setfilter 1, 10, 0, 6, N'SQLT%'
sp_trace_setfilter 1, 10, 0, 6, N'MS%'
sp_trace_setfilter 1, 11, 0, 0, N'joe'
関連項目
fn_trace_getfilterinfo
fn_trace_getinfo