摘要:分離字串
最近在處理SQL SERVER分離字串的方式。
這對SQL SERVER來講,算是滿困難達到的,如我傳進來算是一個『變相的陣列』,什麼是變相的陣列呢,因為我們在撰寫store procedure時,必須要限制傳幾個參數進來,可是如果今天我們有一個參數是要傳多個值進來(不確定有幾個),這時我們就必須在傳進來時用單引號把這個參數包住,讓SQL SERVER視其為一個數,可是我們要怎麼解開這個數呢?
我今天撰寫了一個Store Procedure,他允許傳入4個參數,但我其中1個參數是要傳入多值的,這可怎麼辦呢?因為我找不到在SQL 2000可以處理陣列的,如果有人找到的話,可以教我一下。
因此我如果要傳入多值的話,我就把他視為一個字串,
如我執行Store Procedure時,是
exec dbo.tPro ‘” & para1 & “’,’” & para2 & “’,’” & para3 & “’,’” & para4 & “’
,當然para1到para4是我的變數名稱,那如果今天我para3想要傳入多值的話怎麼辦,因此para3我就必須用一個符號每個值隔開,如利”;”或”||”等等,那這時候我們來假設值好了,para1=1,para2= 2,para3=3;4;5,para4=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
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
這時他就把會幫我把這個變成1個table
Para3 |
3 |
4 |
5 |
醬子我只要利用cursor的功能(就是利用SQL SERVER跑迴圈),就可以將我想要的數值塞進資料庫了。
上述提供的程式與操作,僅供大家參考。