sp_trace_setfilter (Transact-SQL)

适用范围:SQL Server

将筛选应用于跟踪。 sp_trace_setfilter 只能在已停止的现有跟踪(@status0)上执行。 如果此存储过程在不存在或@status不存在0的跟踪上执行,则 SQL Server 将返回错误。

重要

在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用扩展事件。

Transact-SQL 语法约定

语法

sp_trace_setfilter
    [ @traceid = ] traceid
    , [ @columnid = ] columnid
    , [ @logical_operator = ] logical_operator
    , [ @comparison_operator = ] comparison_operator
    , [ @value = ] value
[ ; ]

参数

[ @traceid = ] traceid

筛选器所设置的跟踪的 ID。 @traceid为 int,无默认值。 用户使用此 @traceid 值来标识、修改和控制跟踪。

[ @columnid = ] columnid

应用筛选器的列的 ID。 @columnid为 int,无默认值。 如果 @columnid,SQL NULLServer 将清除指定跟踪的所有筛选器。

[ @logical_operator = ] logical_operator

指定是应用 AND (0) 还是 (1) 运算符。 @logical_operatorint,无默认值。

[ @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。如果@valuenvarcharvarbinary,则其最大长度可以为 8000。

比较运算符为 LIKENOT LIKE时,逻辑运算符可以包含 % 或适合 LIKE 该操作的其他筛选器。

可以指定NULL@value筛选出包含NULL列值的事件。 只有 0= Equal) 和 1<> Not Equal) 运算符才有效 NULL。 在这种情况下,这些运算符等效于 Transact-SQL IS NULLIS NOT NULL 运算符。

若要在列值范围之间应用筛选器,sp_trace_setfilter必须执行两次:一次具有大于或等于 (>=) 比较运算符,另一次使用小于或等于 () 运算符。<=

有关数据列数据类型的详细信息,请参阅 SQL Server 事件类参考

返回代码值

下表介绍了在存储过程完成后,可以获取的代码值。

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

注解

sp_trace_setfilter 是一个 SQL Server 存储过程,它执行以前由早期版本的 SQL Server 中提供的扩展存储过程执行的许多操作。 使用 sp_trace_setfilter 而不是 xp_trace_set*filter 扩展存储过程来创建、应用、删除或操作跟踪上的筛选器。 有关详细信息,请参阅 “筛选跟踪”。

在一次执行 sp_trace_setfilter时,必须同时启用特定列的所有筛选器。 例如,如果用户想对应用程序名称列应用两个筛选器,对用户名列应用一个筛选器,则用户必须按顺序对应用程序名称指定筛选器。 如果用户尝试在一个存储过程调用中指定应用程序名称的筛选器,然后是用户名的筛选器,然后是针对应用程序名称的另一个筛选器,则 SQL Server 将返回错误。

所有 SQL 跟踪存储过程(sp_trace_*)的参数都严格类型化。 如果这些参数不是使用正确的输入参数数据类型(正如参数说明中指定的一样)调用的,则存储过程会返回错误。

权限

需要 ALTER TRACE 权限。

示例

以下示例对 Trace 1 设置三个筛选器。 筛选器 N'SQLT%'N'MS%' 使用“AppName”比较运算符对一列(10,其值为 LIKE)进行操作。 筛选器 N'joe' 使用“UserName”比较运算符对另一列(11,其值为 EQUAL)进行操作。

EXEC sp_trace_setfilter 1, 10, 0, 6, N'SQLT%';
EXEC sp_trace_setfilter 1, 10, 0, 6, N'MS%';
EXEC sp_trace_setfilter 1, 11, 0, 0, N'joe';