今天遇到一個需求如下
Table1 T1
裡面有問候語加上一群使用者的代碼(用逗號區隔開來)
首先先建立一個可以將分隔符號拆開,並且去搜尋對應名稱的function (抓網路上高手寫的Code回來修改而成) ```sql
create FUNCTION [dbo].[ufn_Split]( @InputString nvarchar(4000))
RETURNS varchar(1000) –執行這個function會回傳字串
AS
BEGIN
–用來儲存分隔符號的Index
DECLARE @CIndex smallint
–用來串接字串並最後回傳回去的字串
declare @OutputString varchar(1000) =’’
declare @tempString varchar(500) =’’
WHILE (@InputString<>’’)
BEGIN
SET @CIndex=CHARINDEX(‘,’,@InputString) –抓到第一個分隔符號的Index
IF @CIndex=0 SET @CIndex=LEN(@InputString)+1
–將第一組代碼拆解出來並帶到T2去搜尋對應的名稱,如果搜尋出來為null的話則當作空字串處理
set @tempString = isnull((select name from t2 where id = (SUBSTRING(@InputString,1,@CIndex-1))),’’)
–這串if else純粹只是要解決多餘的逗號問題而已,就不多加解釋了
if @tempString <> ‘’
begin
if @OutputString = ‘’
begin
set @OutputString = @tempString
end
else
set @OutputString = @OutputString +’,‘+@tempString
end
IF @CIndex=LEN(@InputString)+1 BREAK
–把剛剛搜尋過的代碼挑掉後,剩下的繼續跑迴圈
SET @InputString=SUBSTRING(@InputString,@CIndex+1,LEN(@InputString)-@CIndex)
END
RETURN @OutputString
END
1 |
|