SQL中的CSV问题---需要帮助

时间:2011-05-03 13:28:58

标签: sql

我有这个分离功能,我从一些网站得到它,现在我的问题是我有一个表,我想推入imagespath。目前用户可以传递两个图像,但将来可能会增加所需的图像数量,因此我们使用了逗号分隔列,这是一种不好的做法,但在这种情况下是必需的。现在,当检索这些图像时,我想根据它们的ID分离这些图像

在数据库中

1  abc.png,xyz.png
2  fgvm.png,ghy.jpg
像我想要的那样

Imagepath    ID
abc.png      1
xyz.png      1
fgvm.png     2
ghy.jpg      2

在分割功能中使用我正在做这个

 select * from dbo.split ((SELECT ImagePath
    FROM  dbo.AdvtManagement(nolock)),',')

但是这个查询会给我这样的

id val
1  abc.png
2  xyz.png   
3  fgvm.png
4  ghy.jpg

有人可以帮我找到我想要的东西吗?

拆分代码

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Split] (@String varchar(8000), @Delimiter char(1))     
   returns @temptable TABLE (items varchar(8000))       
   as       
   begin       
       declare @idx int       
        declare @slice varchar(8000)       

        select @idx = 1       
            if len(@String)<1 or @String is null  return       

       while @idx!= 0       
       begin       
           set @idx = charindex(@Delimiter,@String)       
           if @idx!=0       
               set @slice = left(@String,@idx - 1)       
           else       
              set @slice = @String       

           if(len(@slice)>0)  
               insert into @temptable(Items) values(@slice)       

           set @String = right(@String,len(@String) - @idx)       
           if len(@String) = 0 break       
       end   
   return       
   end

1 个答案:

答案 0 :(得分:1)

select A.ID, S.Items
from AdvtManagement as A
  cross apply
    dbo.split(A.ImagePath, ',') as S

与一些测试数据相同的代码

with AdvtManagement(ID, ImagePath) as
(
  select 1, 'abc.png,xyz.png' union all 
  select 2, 'fgvm.png,ghy.jpg' 
)

select A.ID, S.Items
from AdvtManagement as A
  cross apply dbo.split(A.ImagePath, ',') as S

结果:

ID  Items
--  -------
1   abc.png
1   xyz.png
2   fgvm.png
2   ghy.jpg