Share via


sp_trace_setfilter (Transact-SQL)

トレースにフィルタを適用します。sp_trace_setfilter は、停止状態 (status が 0) の既存のトレースに対してのみ実行できます。存在しないトレース、または status が 0 以外のトレースに対してこのストアド プロシージャを実行すると、SQL Server ではエラーが返されます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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 であることが必要です。value のデータ型が nvarchar または varbinary である場合、その長さの最大値は 8,000 です。

    比較演算子が LIKE または NOT LIKE である場合、論理演算子には、"%" または LIKE 演算に適した他のフィルタを含めることができます。

    SQL Server 2005 以降では、value に NULL を指定し、NULL 列値のイベントをフィルタ選択できます。NULL では、0 (= 等号) 演算子および 1 (<> 不等号) 演算子だけが有効です。この場合、これらの演算子は、Transact-SQL の IS NULL 演算子および IS NOT NULL 演算子と等価です。

    列の値の範囲にフィルタを適用するには、sp_trace_setfilter を '>=' と '<=' の各比較演算子で 1 回ずつ、合計 2 回実行する必要があります。

    データ列のデータ型の詳細については、「SQL Server イベント クラスの参照」を参照してください。

戻り値

次の表は、このストアド プロシージャの完了時に返されるコード値を示しています。

戻り値

説明

0

エラーはありません。

1

不明なエラーです。

2

トレースは現在実行中です。この時点でトレースを変更すると、エラーが発生します。

4

指定した列は無効です。

5

指定した列にはフィルタを適用できません。この値は、sp_trace_setfilter でのみ返されます。

6

指定した比較演算子は無効です。

7

指定した論理演算子は無効です。

9

指定したトレース ハンドルは無効です。

13

メモリが足りません。指定した操作を実行するための十分なメモリがない場合に返されます。

16

関数がこのトレースに対して無効です。

説明

sp_trace_setfilter は SQL Server のストアド プロシージャです。以前のバージョンの SQL Server で、拡張ストアド プロシージャを使って実行していた操作の多くは、このストアド プロシージャで実行できます。トレースのフィルタを作成、適用、削除、または操作するには、xp_trace_set*filter 拡張プロシージャの代わりに sp_trace_setfilter を使用できます。詳細については、「トレースへのフィルタの適用」を参照してください。

特定の列に適用するフィルタはすべて、sp_trace_setfilter の 1 回の実行で同時に有効にする必要があります。たとえば、ユーザーがアプリケーション名の列に 2 つのフィルタを適用し、ユーザー名の列に 1 つのフィルタを適用する場合は、アプリケーション名のフィルタを続けて指定する必要があります。1 回のストアド プロシージャ呼び出しでアプリケーション名のどちらかのフィルタを指定し、続けてユーザー名のフィルタを指定し、最後にアプリケーション名の残りのフィルタを指定すると、エラーが返されます。

すべての SQL Trace ストアド プロシージャ (sp_trace_xx) のパラメータでは、データ型が厳密に定義されています。これらのパラメータが、引数の説明で指定されている正しいデータ型で呼び出されないと、このストアド プロシージャではエラーが返されます。

権限

ユーザーに ALTER TRACE 権限が必要です。

次の例では、トレース 1 に 3 つのフィルタを設定します。フィルタ N'SQLT%' と N'MS%' は、"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'