sp_trace_setfilter (Transact-SQL)

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

重要说明重要提示

后续版本的 Microsoft 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,则 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。 如果 value 的数据类型为 nvarchar 或 varbinary,则最大长度可为 8000。

    比较运算符为 LIKE 或 NOT LIKE 时,逻辑运算符可以包括“%”或其他适合 LIKE 运算的筛选器。

    在 SQL Server 2005 及更高版本中,您可以将 value 指定为 NULL 以筛选出其列值为 NULL 的事件。 NULL 只对 0(= 等于)和 1(<> 不等于)运算符才有效。 在这种情况下,这些运算符等同于 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_xx) 的参数的类型都受到严格限制。 如果这些参数不是使用正确的输入参数数据类型(正如参数说明中指定的一样)调用的,则存储过程会返回错误。

权限

用户必须拥有 ALTER TRACE 权限。

示例

以下示例对 Trace 1 设置三个筛选器。 筛选器 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';

请参阅

参考

sys.fn_trace_getfilterinfo (Transact-SQL)

sys.fn_trace_getinfo (Transact-SQL)

概念

SQL 跟踪