我有这个分离功能,我从一些网站得到它,现在我的问题是我有一个表,我想推入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
答案 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