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
篩選條件設定之追蹤的標識碼。 @traceid為 int,沒有預設值。 使用者會使用此 @traceid 值來識別、修改及控制追蹤。
[ @columnid = ] columnid
套用篩選之數據行的識別碼。 @columnid為 int,沒有預設值。 如果 @columnid 為 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資料類型的物件標識碼數據行上設定,@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 |
指定的 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%'
操作一個數據行(AppName
值10
)。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';