declare @parameter varchar (200) set @parameter ='1_2_3|4_5_6' ;WITH CTE1 AS( SELECT LEFT(items, CHARINDEX('_', items)-1) AS ss, SUBSTRING(items, CHARINDEX('_', items)+1 ,100) as col,SUBSTRING(items, CHARINDEX('_', items)+1 ,100) as col1 FROM dbo.characterSplit(@parameter,'|') ) --INSERT INTO tblAdBlock(AdSpaceId ,Row ,[Column]) SELECT * FROM CTE1 ;
ALTER FUNCTION [dbo].[characterSplit](@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
ss col col11 2_3 2_34 5_6 5_6
ss col col11 2 34 5 6
declare @parameter varchar (200)set @parameter ='1_2_3|4_5_6'SELECT ss=MAX(CASE c.itemnumber WHEN 1 THEN c.item END) ,col=MAX(CASE c.itemnumber WHEN 2 THEN c.item END) ,col1=MAX(CASE c.itemnumber WHEN 3 THEN c.item END)FROM (SELECT @parameter) a(parameter)CROSS APPLY dbo.DelimitedSplit8k(parameter, '|') bCROSS APPLY dbo.DelimitedSplit8k(item, '_') cGROUP BY b.ItemNumber
declare @parameter varchar (200)set @parameter ='1_2_3|4_5'SELECT ss=MAX(CASE c.itemnumber WHEN 1 THEN c.item END) ,col=MAX(CASE c.itemnumber WHEN 2 THEN c.item END) ,col1=MAX(CASE c.itemnumber WHEN 3 THEN c.item END)FROM (SELECT @parameter) a(parameter)CROSS APPLY dbo.DelimitedSplit8k(parameter, '|') bCROSS APPLY dbo.DelimitedSplit8k(item, '_') cGROUP BY b.ItemNumber
ss col col11 2 34 5 NULL
ss col col11 2 34 5 0
declare @parameter varchar (200)set @parameter ='1_2_3|4_5'SELECT ss=MAX(CASE c.itemnumber WHEN 1 THEN c.item END) ,col=MAX(CASE c.itemnumber WHEN 2 THEN c.item END) ,col1=MAX(CASE c.itemnumber WHEN 3 THEN ISNULL(c.item,0) END)FROM (SELECT @parameter) a(parameter)CROSS APPLY dbo.DelimitedSplit8k(parameter, '|') bCROSS APPLY dbo.DelimitedSplit8k(item, '_') cGROUP BY b.ItemNumber
declare @parameter varchar (200)set @parameter ='1_2_3|4_5'SELECT ss=isnull(MAX(CASE c.itemnumber WHEN 1 THEN c.item END), 0) ,col=isnull(MAX(CASE c.itemnumber WHEN 2 THEN c.item END), 0) ,col1=isnull(MAX(CASE c.itemnumber WHEN 3 THEN c.item END), 0)FROM (SELECT @parameter) a(parameter)CROSS APPLY dbo.DelimitedSplit8k(parameter, '|') bCROSS APPLY dbo.DelimitedSplit8k(item, '_') cGROUP BY b.ItemNumber