INSERT INTO t(cod, name)VALUES('T1;T2;T3;T4;T5;', 'Pencil Box;Eraser;Board Marker;Trimmer;Ball Point;');SELECT CAST('<r>'+REPLACE(cod,';','</r><r>')+'</r>' AS XML).query('/r[1]').value('.','varchar(256)') cod, CAST('<r>'+REPLACE(name,';','</r><r>')+'</r>' AS XML).query('/r[1]').value('.','varchar(256)') nameINTO #tmpTable FROM tinsert INTO #tmpTableSELECT CAST('<r>'+REPLACE(cod,';','</r><r>')+'</r>' AS XML).query('/r[2]').value('.','varchar(256)') cod, CAST('<r>'+REPLACE(name,';','</r><r>')+'</r>' AS XML).query('/r[2]').value('.','varchar(256)') nameFROM t;select * from #tmpTable
CREATE TABLE [dbo].[t]( [cod] [varchar](350) NULL, [name] [varchar](300) NULL) ON [PRIMARY]GO
WITH rep AS( SELECT cod ,';' delim ,name from t UNION ALL SELECT LEFT(cod, CHARINDEX(delim, cod, 1) - 1) ,delim ,LEFT(name, CHARINDEX(delim, name, 1) - 1) FROM rep WHERE (CHARINDEX(delim, cod, 1) > 0) UNION ALL SELECT RIGHT(cod, LEN(cod) - CHARINDEX(delim, cod, 1)) ,delim ,RIGHT(name, LEN(name) - CHARINDEX(delim, name, 1)) FROM rep WHERE (CHARINDEX(delim, cod, 1) > 0))SELECT cod,nameFROM repWHERE (CHARINDEX(delim, cod, 1) = 0)AND LEN(cod)>0OPTION (MAXRECURSION 0);
DECLARE @ItemCod VARCHAR(8000) = 'T1;T2;T3;'DECLARE @ItemName VARCHAR(8000) = 'Pencil Box;Eraser;Mouse Pad;'DECLARE @Amount VARCHAR(8000) = '1900;2000;8900;'SELECT c.ItemNumber, ItemCod = c.Item, ItemName = n.Item, Amount = a.Item FROM dbo.DelimitedSplit8K(@ItemCod,';') c INNER JOIN dbo.DelimitedSplit8K(@ItemName,';') n ON n.ItemNumber = c.ItemNumber INNER JOIN dbo.DelimitedSplit8K(@Amount,';') a ON a.ItemNumber = c.ItemNumber WHERE c.Item <> ''-- ResultsItemNumber ItemCod ItemName Amount1 T1 Pencil Box 19002 T2 Eraser 20003 T3 Mouse Pad 8900
DECLARE @x XML = '<Items> <Item> <ItemCode>T1</ItemCode> <ItemName>Pencil Box</ItemName> <Amount>1900</Amount> </Item> <Item> <ItemCode>T2</ItemCode> <ItemName>Eraser</ItemName> <Amount>2000</Amount> </Item> <Item> <ItemCode>T3</ItemCode> <ItemName>Mouse Pad</ItemName> <Amount>8900</Amount> </Item></Items>';SELECT i.value('(ItemCode)[1]','varchar(50)'),i.value('(ItemName)[1]','varchar(50)'),i.value('(Amount)[1]','numeric')FROM@x.nodes('//Items/Item') TAB(i)