SQL-Server SP 小記
故事的起源是這樣的...
在一些資料庫的欄位中,我們有時候會將資料存成如下
1,2,3 |
3,4,5 |
1,2,3,4,5,6 |
(個人覺得此存法並不好)
然而,事情總不是我們想怎麼樣就可以怎麼樣的
人在江湖~ 身不由己啊
所以現在在與其他table 在做資料關聯的時候
我會需要把資料拆解成
1 |
2 |
3 |
這時我想的作法是寫一個stored function來幫我們做資料處理
function 如下
其中
@InputStr 為要被轉換的字串
@TrimSplitor 為前後要被拔除的字串
@Splitor 字串中的資料與資料間的分隔符號
ex. -1,2,3- 為@InputStr
- 為@TrimSplitor
, 為@Splitor
此時開心地服用此function是沒有問題的
然而,當轉換的資料量達到一定程度
我們會發現,其執行的效能並不怎麼樣
怎麼會這樣!!!
經由高手同事的解說
發現原來我們在function中寫了一段insert to temp table的語法
此insert 會造成效能的損耗且其非必須
因此得到了另一個寫法
將其拆解成兩個function
1. 處理TrimSplitor
2. 處理Splitor
如此一來,我們即可避開insert tmp table的窘境
修改完成的function如下
實際比較的測試結果
效能差了很多倍!!!
果然還有的練啊啊