你們大部分人可能已經在SQL SERVER中建立自己的用戶定義函數(UDF),但是你知道麼?微軟公司已經集成了大量自己的UDFs,特別是在最新發布的SP3中.在這篇文章中 Baya Pavliashvili和Kevin Kline系統地研究了關於SQL SERVER跟蹤部分的UDF.你們中的一些人也許想閱讀以前SQL Server Professional的一篇關於傳統UDFs的文章,比如Andrew Zanevsky's 2000年9月的專欄 ("Granting Wishes with UDF"), Andrew Zanevsky and Anton Jiline's 2001年10月的文章 ("UDF Performance… or Lack of It"), 或 Jimmy Nilsson's 2003年7月的文章("Another UDF: Global Constants").
UDFs是SQL Server 2000期待已久的附加功能, UDFs典型的應用是DBAs和開發者用來模塊化代碼和間或用來提高性能.在這篇文章中,我們將從零開始了解SQL Server系統提供的UDFs,可以允許DBA進行跟蹤管理.
雖然系統提供的用戶定義函數聽起來有一點矛盾,但微軟還是集成大量的內部的UDFs(只讀,系統提供).同時,盡管UDFs這個特性在SQL Server 2000最初發布是就提供了,不過我們發現只是在SP3中微軟才因為自己的目的而大量使用,所有系統提供的UDFs函數都是以’fn_’開始並且保存在master數據庫中.
比較系統提供的和標准的UDF
如果你熟悉UDFs,你也許知道UDF是不能修改固定表的記錄,典型的應用是:讀取數據,修改表變量的數據,返回數據.而且UDFs可以運行擴展存儲過程和系統提供的自定義函數.事實上有很多的系統提供的自定義函數只是簡單的調用一個擴展存儲過程.[ 擴展存儲過程通常是有C++寫的DLL文件,你可以看Paul Storer-Martin's在2002年7月和8月的文章"Playing the ODS"],因此閱讀用T-SQL寫的UDF相同功能的代碼不是更好麼? 系統提供的自定義函數和用戶的自定義函數在運行時有輕微的差別:典型的自定義函數(UDFs)可以向這樣調用:
SELECT column_list
FROM owner_name.UDF_name (@parameter1, … @parameterN)
系統提供的自定義函數需要在FROM後面加二個冒號(::),同時你不必指定該功能的所有者:
SELECT column_list
FROM :: fn_SystemSupplIEdUDF
(@parameter1, … @parameterN)
比如: 系統提供的自定義函數fn_helpcollations()可以返回SQL Server 2000支持的所有字符集,我們可以這樣執行:
SELECT * FROM :: fn_helpcollations()
用於跟蹤的自定義函數(UDFs)
一條跟蹤捕獲的T-SQL語句發給(或運行一個存儲過程在)指定的SQL SERVER的實列並且保存為一個*.TRC的文件.SQL Server的跟蹤可以通過Profiler工具或運行系統的存儲過程sp_trace_create建立並且可以指定許多過慮的標准來限制輸出文件.在這篇文章中,我們主要針對跟蹤功能的系統提供的自定義函數.
fn_trace_gettable
fn_trace_gettable() 需要二個參數: 初始化的跟蹤文件名(.TRC)和跟蹤文件的個數.當你建立一個跟蹤,你可以配置SQL SERVER限制跟蹤文件的大小.當跟蹤文件到達指定的大小,SQL Server會字段產生一個新的”滾動的”跟蹤文件. fn_trace_gettable()函數的第二個參數是”滾動的”跟蹤文件的個數,這是在指定第一個參數時開始的.