sqlServer 2008 一行转多行的问题怎么解决

sqlServer <wbr>2008 <wbr>一行转多行的问题怎么解决

 

如上图,需要将一行有逗号的转为多行,

这个问题是在cnblogs看到的

一看到这个问题

我的想法就是用游标实现

但发现有大神用sql xml实现了

果然高手

游标实现的代码量多且效率不高,xml的代码少,效率高 

代码如下

 

  1. create table #table_temp(
  2. id int identity(1,1) not null,
  3. txt varchar(50));
  4. declare mycur cursor for select txt from Table_1
  5. open mycur
  6. declare @t_txt varchar(50),@t_txt1 varchar(50)
  7. fetch next from mycur into @t_txt
  8. while(@@FETCH_STATUS = 0)
  9. begin 
  10. if CHARINDEX(',',@t_txt)> 0
  11. begin
  12.   while(CHARINDEX(',',@t_txt)> )
  13.   begin
  14.   set @t_txt1 = substring(@t_txt,1,CHARINDEX(',',@t_txt)-1)
  15.   insert #table_temp(txt) values(@t_txt1)
  16.   set @t_txt = SUBSTRING(@t_txt,CHARINDEX(',',@t_txt)+1,LEN(@t_txt) - LEN(@t_txt1))
  17.   end
  18.   insert into #table_temp(txt) values (@t_txt)
  19. end
  20. else
  21. begin
  22. insert #table_temp(txt) values(@t_txt)
  23. end
  24. fetch next from mycur into @t_txt
  25. end
  26. close mycur
  27. deallocate mycur
  28. select * from #table_temp
  29. drop table  #table_temp;

 

 

sql xml 实现方式如下

 

  1. select 
  2. a.id,b.txt
  3. from 
  4. (select id,txt=convert(xml,''+replace(txt,',','')+'') from Table_1
  5. )a
  6.  outer apply
  7. (select txt=C.v.value('.','nvarchar(100)') from a.txt.nodes('/root/v')C(v))b


posted on 2015-01-21 15:40  MaxGeek  阅读(71)  评论(0)    收藏  举报