[SQL] 服用Stored Function的注意事項

  • 688
  • 0

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如下

 

 

實際比較的測試結果

 

效能差了很多倍!!!

果然還有的練啊啊