最近在處理SQL SERVER分離字串的方式。
 
這對SQL SERVER來講,算是滿困難達到的,如我傳進來算是一個『變相的陣列』,什麼是變相的陣列呢,因為我們在撰寫store procedure時,必須要限制傳幾個參數進來,可是如果今天我們有一個參數是要傳多個值進來(不確定有幾個),這時我們就必須在傳進來時用單引號把這個參數包住,讓SQL SERVER視其為一個數,可是我們要怎麼解開這個數呢?
 
我今天撰寫了一個Store Procedure,他允許傳入4個參數,但我其中1個參數是要傳入多值的,這可怎麼辦呢?因為我找不到在SQL 2000可以處理陣列的,如果有人找到的話,可以教我一下。
 
因此我如果要傳入多值的話,我就把他視為一個字串,
如我執行Store Procedure時,是
 
exec dbo.tPro ‘” & para1 & “’,’” & para2 & “’,’” & para3 & “’,’” & para4 & “’
 
,當然para1para4是我的變數名稱,那如果今天我para3想要傳入多值的話怎麼辦,因此para3我就必須用一個符號每個值隔開,如利”||”等等,那這時候我們來假設值好了,para1=1para2= 2para3=3;4;5para4=6,那我這一個Store Procedure該怎麼執行呢?
Exec dbo.tProc ‘1’,’2’,’3;4;5’,’6’
因此這時候我在sql server 該怎麼處理這樣子的數值,這時就必須用一個function,把這個para3解開,
create function f_split(@c varchar(2000),@split varchar(2))    
returns   @t   table(col   varchar(20))    
as    
    begin    
    
      while(charindex(@split,@c)<>0)    
        begin    
          insert   @t(col)   values   (substring(@c,1,charindex(@split,@c)-1))    
          set   @c   =   stuff(@c,1,charindex(@split,@c),'')    
        end    
      insert   @t(col)   values   (@c)    
      return    
    end
 
這個function,第一個參數是傳入字串,第二個參數是用什麼當作split
SELECT * FROM f_split(para3, ';') AS t
這時他就把會幫我把這個變成1table