sp_trace_setfilter (Transact-SQL)

將篩選套用在追蹤上。只能在已停止 (status 是 0) 的現有追蹤上執行 sp_trace_setfilter。如果是在不存在的追蹤上或是在 status 不是 0 的追蹤上執行這個預存程序,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
    這是設定篩選的追蹤識別碼。trace_id 是 int,沒有預設值。使用者會利用這個 trace_id 值來識別、修改和控制追蹤。

  • [ @columnid= ] column_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 資料類型的 [物件識別碼] 資料行上設定篩選,value 就必須是 int。如果 value 是 nvarchar 或 varbinary,最大長度便是 8000。

    當比較運算子是 LIKE 或 NOT LIKE 時,邏輯運算子可以併入 "%" 或 LIKE 運算所適用的其他篩選。

    在 SQL Server 2005 及更新版本中,您可以對 value 指定 NULL 來篩選出具有 NULL 資料行值的事件。僅 0 (= 等於) 和 1 (<> 不等於) 運算子是有效的 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_xx) 的參數都具備嚴格的類型。如果沒有依照引數描述所指定,以正確的輸入參數資料類型來呼叫這些參數,預存程序會傳回錯誤。

權限

使用者必須有 ALTER 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'