將篩選應(yīng)用到跟蹤。只有在現(xiàn)有的已停止跟蹤(status 為 0)上才能執(zhí)行 sp_trace_setfilter。如果在不存在或其 status 不為 0 的跟蹤上執(zhí)行該存儲(chǔ)過程,則 SQL Server 2000 將返回錯(cuò)誤。
sp_trace_setfilter [ @traceid = ] trace_id
, [ @columnid = ] column_id
, [ @logical_operator = ] logical_operator
, [ @comparison_operator = ] comparison_operator
, [ @value = ] value
[ @traceid = ] trace_id
是要為其設(shè)置篩選的跟蹤 ID。trace_id 的數(shù)據(jù)類型為 int,沒有默認(rèn)設(shè)置。用戶使用 trace_id 值識(shí)別、修改和控制跟蹤。
[ @columnid = ] column_id
是將在其上應(yīng)用篩選的列 ID。column_id 的數(shù)據(jù)類型為 int,沒有默認(rèn)設(shè)置。如果 column_id 為 NULL,則 SQL Server 為指定的跟蹤清除所有篩選。
[ @logical_operator = ] logical_operator
指定將應(yīng)用 AND (0) 運(yùn)算符還是應(yīng)用 OR (1) 運(yùn)算符。logical_operator 的數(shù)據(jù)類型為 int,沒有默認(rèn)設(shè)置。
[ @comparison_operator = ] comparison_operator
指定要進(jìn)行比較的類型。comparison_operator 的數(shù)據(jù)類型為 int,沒有默認(rèn)設(shè)置。下表包含比較運(yùn)算符及其代表值。
值 | 比較運(yùn)算符 |
---|---|
0 | =(等于) |
1 | <>(不等于) |
2 | >(大于) |
3 | <(小于) |
4 | >=(大于或等于) |
5 | <=(小于或等于) |
6 | LIKE |
7 | NOT LIKE |
[ @value = ] value
指定要在其上篩選的值。value 的數(shù)據(jù)類型必須匹配要篩選的列的數(shù)據(jù)類型。因此,如果將篩選設(shè)置在數(shù)據(jù)類型為 int 的對(duì)象 ID 列上,則 value 必須是 int。不允許 NULL 值和空字符串;當(dāng)事件的列值為空時(shí),SQL Server 將傳遞在該列上定義的任何篩選。如果 value 的數(shù)據(jù)類型為 nvarchar 或 varbinary,則的最大長(zhǎng)度可以是 8000。
比較運(yùn)算符為 LIKE 或 NOT LIKE 時(shí),邏輯運(yùn)算符可以包括"%"或其它適合 LIKE 操作的篩選。
若要在列值范圍內(nèi)應(yīng)用篩選,則必須執(zhí)行 sp_trace_setfilter 兩次:一次用 '>=' 比較運(yùn)算符,一次用 '<=' 運(yùn)算符。
下表描述在存儲(chǔ)過程完成之后用戶可能獲得的代碼值。
返回代碼 | 描述 |
---|---|
0 | 沒有錯(cuò)誤。 |
1 | 未知錯(cuò)誤。 |
2 | 本跟蹤當(dāng)前正在運(yùn)行。此時(shí)更改跟蹤將導(dǎo)致錯(cuò)誤。 |
4 | 指定的列無效。 |
5 | 不允許篩選指定的列。只有 sp_trace_setfilter 才能返回該值。 |
6 | 指定的比較運(yùn)算符無效。 |
7 | 指定的邏輯運(yùn)算符無效。 |
9 | 指定的跟蹤句柄無效。 |
13 | 內(nèi)存不足。在沒有足夠內(nèi)存執(zhí)行指定的操作時(shí)返回此代碼。 |
16 | 該函數(shù)對(duì)此跟蹤無效。 |
sp_trace_setfilter 是 Microsoft® SQL Server™ 2000 存儲(chǔ)過程,它執(zhí)行以前由 SQL Server 早期版本使用的擴(kuò)展存儲(chǔ)過程所執(zhí)行的很多操作。使用 sp_trace_setfilter 存儲(chǔ)過程而不使用 xp_trace_set*filter 擴(kuò)展存儲(chǔ)過程以在跟蹤上創(chuàng)建、應(yīng)用、刪除或操作篩選。有關(guān)更多信息,請(qǐng)參見創(chuàng)建和管理模板。
在 sp_trace_setfilter 的一次執(zhí)行過程中必須一起啟用特定列的所有篩選。例如,如果用戶要在應(yīng)用程序名列上應(yīng)用兩個(gè)篩選并在用戶名列上應(yīng)用一個(gè)篩選,則用戶必須按順序指定應(yīng)用程序名上的篩選。如果用戶試圖在調(diào)用一個(gè)存儲(chǔ)過程時(shí)指定以應(yīng)用程序名篩選,其后以用戶名篩選,然后以應(yīng)用程序名篩選,則 SQL Server 將返回錯(cuò)誤。
嚴(yán)格地鍵入所有 SQL 跟蹤存儲(chǔ)過程 (sp_trace_xx) 的參數(shù)。如果沒有用正確的輸入?yún)?shù)數(shù)據(jù)類型(與在參數(shù)說明中指定的相同)調(diào)用這些參數(shù),則存儲(chǔ)過程將返回錯(cuò)誤。
只有 sysadmin 固定服務(wù)器角色成員才能執(zhí)行 sp_trace_setfilter。
下例在 Trace 1 上設(shè)置 3 個(gè)篩選。篩選 N'SQLT%' 和 N'MS%' 使用"LIKE"比較運(yùn)算符對(duì)一個(gè)列(AppName,其值為 10)進(jìn)行操作。篩選 N'joe' 使用"EQUAL"比較運(yùn)算符對(duì)另一個(gè)列(UserName,其值為 11)進(jìn)行操作。
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'
相關(guān)文章