共用方式為


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

篩選條件設定之追蹤的標識碼。 @traceid為 int,沒有預設值。 使用者會使用此 @traceid 值來識別、修改及控制追蹤。

[ @columnid = ] columnid

套用篩選之數據行的識別碼。 @columnid為 int,沒有預設值。 如果 @columnidNULL,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資料類型的物件標識碼數據行上設定,@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 指定的 Column 無效。
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 許可權。

範例

下列範例會在追蹤 1上設定三個篩選。 使用 「比較運算子來篩選N'SQLT%'N'MS%'操作一個數據行(AppName10)。LIKE 篩選N'joe'條件會使用 「EQUAL比較運算子,在不同的數據行 (UserName, value11) 上運作。

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';