sp_trace_setfilter (Transact-SQL)
适用范围:SQL Server
将筛选应用于跟踪。 sp_trace_setfilter
只能在已停止的现有跟踪(@status 为 0
)上执行。 如果此存储过程在不存在或@status不存在0
的跟踪上执行,则 SQL Server 将返回错误。
重要
在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用扩展事件。
语法
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 NULL
Server 将清除指定跟踪的所有筛选器。
[ @logical_operator = ] logical_operator
指定是应用 AND (0
) 还是 (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。如果@value为 nvarchar 或 varbinary,则其最大长度可以为 8000。
比较运算符为 LIKE
或 NOT LIKE
时,逻辑运算符可以包含 %
或适合 LIKE
该操作的其他筛选器。
可以指定NULL
@value筛选出包含NULL
列值的事件。 只有 0
(=
Equal) 和 1
(<>
Not Equal) 运算符才有效 NULL
。 在这种情况下,这些运算符等效于 Transact-SQL IS NULL
和 IS 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';