Transact-SQL 参考

sp_trace_setfilter

将筛选应用到跟踪。只有在现有的已停止跟踪(status 为 0)上才能执行 sp_trace_setfilter。如果在不存在或其 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,则 SQL Server 为指定的跟踪清除所有筛选。

[ @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 的对象 ID 列上,则 value 必须是 int。不允许 NULL 值和空字符串;当事件的列值为空时,SQL Server 将传递在该列上定义的任何筛选。如果 value 的数据类型为 nvarcharvarbinary,则的最大长度可以是 8000。

比较运算符为 LIKE 或 NOT LIKE 时,逻辑运算符可以包括"%"或其它适合 LIKE 操作的筛选。

若要在列值范围内应用筛选,则必须执行 sp_trace_setfilter 两次:一次用 '>=' 比较运算符,一次用 '<=' 运算符。

返回代码值

下表描述在存储过程完成之后用户可能获得的代码值。

返回代码 描述
0 没有错误。
1 未知错误。
2 本跟踪当前正在运行。此时更改跟踪将导致错误。
4 指定的列无效。
5 不允许筛选指定的列。只有 sp_trace_setfilter 才能返回该值。
6 指定的比较运算符无效。
7 指定的逻辑运算符无效。
9 指定的跟踪句柄无效。
13 内存不足。在没有足够内存执行指定的操作时返回此代码。
16 该函数对此跟踪无效。

注释

sp_trace_setfilter 是 Microsoft® SQL Server™ 2000 存储过程,它执行以前由 SQL Server 早期版本使用的扩展存储过程所执行的很多操作。使用 sp_trace_setfilter 存储过程而不使用 xp_trace_set*filter 扩展存储过程以在跟踪上创建、应用、删除或操作筛选。有关更多信息,请参见创建和管理模板

sp_trace_setfilter 的一次执行过程中必须一起启用特定列的所有筛选。例如,如果用户要在应用程序名列上应用两个筛选并在用户名列上应用一个筛选,则用户必须按顺序指定应用程序名上的筛选。如果用户试图在调用一个存储过程时指定以应用程序名筛选,其后以用户名筛选,然后以应用程序名筛选,则 SQL Server 将返回错误。

严格地键入所有 SQL 跟踪存储过程 (sp_trace_xx) 的参数。如果没有用正确的输入参数数据类型(与在参数说明中指定的相同)调用这些参数,则存储过程将返回错误。

权限

只有 sysadmin 固定服务器角色成员才能执行 sp_trace_setfilter

示例

下例在 Trace 1 上设置 3 个筛选。筛选 N'SQLT%' 和 N'MS%' 使用"LIKE"比较运算符对一个列(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