[SQL Server] 利用自訂函數簡化指令及提升軟體效能

假設有一個表單叫 VIP ,裡面存放著二個欄位:

CustomerId varchar(5) VIP 會員編號
ReferCustomerId varchar(5) 推薦人的會員編號


CustomerId 、ReferCustomerId 會員編號是參照到 Customer 的表單:

Id varchar(5) 會員編號
Name varchar(50) 會員姓名

假設有100萬個會員,而我們要產生以下四個欄位的報表:

[VIP 會員編號]、[VIP 會員姓名]、[推薦人的會員編號]、[推薦人的會員姓名]

你會怎麼做呢?

如果只是一般的查詢倒可以在程式裡面寫一個像 getEmployeeName(Id) 的函式,再用迴圈跑起來:

do until rs.EOF
print  getEmployeeName(rs.Fields("CustomerId").Value)
print  getEmployeeName(rs.Fields("ReferCustomerId").Value)
rs.MoveNext
loop

這種做法的好處是程式可攜性高,換成任何一個資料庫都可以用。但是在上百萬筆的迴圈下,程式的時間都花在開啟多個連線查詢會員姓名,而完全無法發揮料庫的效能。

這時就要思考如何只透過一個 SQL Command 來完成這個報表。

當然方法有很多種,包括現在我們要介紹的 SQL Server 自訂函數功能。

自訂函數最大的好處可以讓 SQL Command 就像在寫程式一樣,不但可以大量簡化 SQL Command,也可以使邏輯更為清楚。

我們現在來寫一個 getEmployeeName(Id) 的 SQL Server 自訂函數版本:

20050609_01.gif

完成後便可應用在產生報表上,SQL Command 可以這樣下:

20050609_02.gif

藉由這個例子可以了解自訂函數的便利性,然而在商業用途上的應 用,欄位可不會只有這四個,尤其在有大量 Code Table Schema 及遇到複雜邏輯的時候,使用 SQL Server 的自訂函數可以加速程式的開發,也能降低邏輯上的錯誤,實在是非常便利好工具。

2 comments On [SQL Server] 利用自訂函數簡化指令及提升軟體效能

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar