1. 程式人生 > >sql儲存過程中分隔字串

sql儲存過程中分隔字串

最近遇到了如下問題,要向用戶角色資訊表中插入資料。

每個使用者有多個角色,因此每次新增使用者要新增一到多條記錄。

這個過程要放到儲存過程中實現,但是儲存過程不能傳入集合。

解決思路是,將角色Id集合轉成用逗號分隔的字串,在儲存過程中分隔。

那麼儲存過程中如何分隔字串呢?

因為sql中沒有split函式,所以要通過其它函式,和while語句來實現了。

主要用到以下幾個函式:

CHARINDEX(@str, ',') --獲取分隔符在字串中第一次出現的位置
LEFT(@str, 2) --擷取字串左側指定個數的字元
RIGHT(@str,2) --擷取字串右側指定個數的字元
len(@str) --獲取字串長度

具體程式碼如下:


BEGIN

declare @AccountString varchar(50) = '0,1,2,3';
declare @SplitChar varchar(50) = ',';

PRINT @AccountString;

    declare @Account varchar(200)  --擷取後的字元  
    declare @SplitCharPos int      --記錄擷取位置  
    set @SplitCharPos = 0;         --初始擷取位置為0  
    select @SplitCharPos
= CHARINDEX(@SplitChar, @AccountString) --第一次出現的位置 if @SplitCharPos = 0 --如果第一次出現位置為0 begin select @Account = @AccountString --原字串等於擷取後的字元 select @Account as Account --查出要擷取的字元 ------------------------------ 操作------------------------ end
else begin while @SplitCharPos <> 0 --出現的位置不為0時執行 begin select @SplitCharPos = CHARINDEX(@SplitChar, @AccountString) if @SplitCharPos = 0 begin select @Account = @AccountString end else begin select @Account = LEFT(@AccountString, @SplitCharPos - 1) select @AccountString = RIGHT(@AccountString, len(@AccountString)-len(@Account) - 1) end ------------------------------ 操作------------------------ PRINT @AccountString; end ------------------------------ 操作------------------------ PRINT @AccountString end END