最近遇到了如下問題,要向使用者角色資訊表中插入資料。
每個使用者有多個角色,因此每次新增使用者要新增一到多條記錄。
這個過程要放到儲存過程中實現,但是儲存過程不能傳入集合。
解決思路是,將角色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 --查出要擷取的字元
------------------------------ 操作------------------------
endelse
begin
while
@splitcharpos
<> 0 --出現的位置不為0時執行
begin
select @splitcharpos = charindex(@splitchar, @accountstring)
if@splitcharpos = 0
begin
select @account = @accountstring
endelse
begin
select @account = left(@accountstring, @splitcharpos - 1)
select @accountstring = right(@accountstring, len(@accountstring)-len(@account) - 1)
end
------------------------------ 操作------------------------
print
@accountstring;
end
------------------------------ 操作------------------------
print
@accountstring
endend
SQL分隔字串的儲存過程
我在做乙個專案時研究了查詢多個關鍵字的技術,這是其中用到的乙個技術。分隔字串 儲存過程的作用就是把 jiangjs,shenxy,cheng 類的字串隔開儲存到乙個表中。create procedure 分隔字串 string nvarchar 1000 要分隔的字串 splitchar nvarc...
Sql 儲存過程中擷取字串
前言 專案中需要將乙個拼接好的字串作為引數傳入儲存過程中,而在儲存過程中需要將字串拆開,下面來看一下實現過程。正文介面接收一系列pcb序列號,在儲存過程中將傳入的一系列序列號取出來一一關聯,也就是說將傳進來的一系列序列號分為一組,並且過站操作 記錄一下 alter procedure dbo cp ...
sql中分割字串
set ansi nulls on set quoted identifier on goalter function dbo get strarraystrofindex str varchar 1024 要分割的字串 split varchar 10 分隔符號 index int 取第幾個元素 ...