2011-08-05 114 views
0

我有一個字符串,其逗號分隔值。 我需要將用逗號分隔的單個值插入表中。 我寫了下面的代碼,但值被插入到表中。 任何人都可以幫我找到我的代碼中的錯誤。將值插入到表中時出錯

declare @str varchar(25) 
    set @str = 'a,b,c' 
    Create table #Qw(parts varchar(25)) 
    while(patindex(',',@str)>0) 
    begin  
     insert into #Qw values(substring(@str,1,1)) 
    end 
    select * from #Qw 
+2

你會得到什麼錯誤? – Oded

+0

@Oded:結果爲空(0行)。 'patindex'不會找到任何匹配,所以它不會進入循環。 – Guffa

+0

@Guffa - 試圖讓OP考慮他的問題和問題描述。 – Oded

回答

2

的一些問題:

  • 您需要使用charindex而不是patindex
  • 您需要更改循環內的字符串,否則它將永遠不會退出。
  • 您需要使用逗號的索引來獲取子字符串,否則它將只適用於單個字符的項目。

declare @str varchar(25) 
set @str = 'a,b,c' 

create table #Qw (parts varchar(25)) 

while (charindex(',', @str) > 0) begin 
    -- get first part of the string up to the first comma 
    insert into #Qw values(substring(@str, 1, charindex(',', @str) - 1)) 
    -- remove first part of the string including the comma 
    set @str = substring(@str, charindex(',', @str) + 1, 100) 
end 

-- insert the last item from the string 
insert into #Qw values(@str) 

select * from #Qw 

結果:

+-------+ 
| parts | 
+-------+ 
| a  | 
| b  | 
| c  | 
+-------+ 
+0

我知道了Guffa。 – Shine

0

這應該工作,並仍然可以工作,即使字符串是不是所有的單個字符。

DECLARE @str varchar(25) 
DECLARE @Pos int 

SET @str = 'a,b,c' 

Create table #Qw(parts varchar(25)) 

WHILE(CHARINDEX(',',@str)>0) 
BEGIN 
    PRINT LEFT(@str,CHARINDEX(',',@str)-1) 

    INSERT INTO #Qw(parts) VALUES(LEFT(@str,CHARINDEX(',',@str)-1)) 
    SET @str = RIGHT(@str,LEN(@str) - CHARINDEX(',',@str)) 
END 

INSERT INTO #Qw(parts) VALUES(@str) 

SELECT * FROM #Qw