将值插入表时出错

时间:2011-08-05 07:54:57

标签: sql sql-server-2008

我有一个字符串,其值以逗号分隔。 我需要将用逗号分隔的单个值插入表中。 我编写了以下代码,但值已插入表中。 任何人都可以帮我找到我的代码中的错误。

   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 个答案:

答案 0 :(得分: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     |
+-------+

答案 1 :(得分: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