SQL Server 2000 支援標量與資料表值函數。以往優化建議避免使用游標(高系統開銷),但某些逐列處理邏輯(如漢字轉拼音需查表)不得不使用游標。UDF 現可封裝此類邏輯,大幅降低開銷。
-- 使用者定義函數
CREATE FUNCTION Translate (@Original_Text VARCHAR(100))
RETURNS VARCHAR(500)
AS
BEGIN
DECLARE @intLength TINYINT, @strTemp VARCHAR(10),
@strResult VARCHAR(500), @strChar VARCHAR(2),
@i TINYINT
SET @intLength = LEN(@Original_Text)
SET @strResult = ''
SET @i = 1
WHILE @i <= @intLength
BEGIN
SELECT @strChar = SUBSTRING(@Original_Text, @i, 1)
SET @strTemp = NULL
SELECT @strTemp = spell FROM wordspell WHERE Word = @strChar
SELECT @strResult = @strResult + ISNULL(@strTemp, @strChar)
SET @i = @i + 1
END
RETURN @strResult
END
GO
-- 單一陳述式完成批次更新
UPDATE phonecode SET namesame = Translate(name), addsame = Translate(address)
對比游標版本需宣告多變數、開啟游標、逐列 FETCH、更新、關閉游標,UDF 版本程式碼精簡、可維護性高、執行計畫最佳化更佳。下期將探討新資料類型。