Dim strFileName() As StringstrFileName = IO.File.ReadAllLines(filename, Encoding.GetEncoding(1253))Dim headerIdent as string = "H" Dim g As Guid For Each myLine In strFileName If Not myLine = Chr(endCharacter) Then If myLine.Substring(0, 2) = headerIdent Then g = Guid.NewGuid() End If tempStr &= g & ";" & myLine.ToString & Environment.NewLine End If Next
DECLARE @t TABLE (ItemID INT, strcol VARCHAR(100))INSERT INTO @tSELECT 222, 'H;123442;23%;78.99;52000990889'UNION ALL SELECT 222, 'L;socks;blue;100'UNION ALL SELECT 222, 'L;socks;red;200'UNION ALL SELECT 223, 'H;123443;23%;500.99;52000990111'UNION ALL SELECT 223, 'L;skirt;blue;100'UNION ALL SELECT 223, 'L;pants;red;200'
DECLARE @x TABLE (ItemID INT, xmlcol XML);WITH CreateXML AS ( SELECT ItemID, strcol ,xmlcol=CASE SUBSTRING(strcol, 1, 1) WHEN 'H' THEN '<h>' + STUFF(deliveryPlace + '</deliveryPlace></h>', 1, 1, '') ELSE '<d>' + STUFF(qty + '</qty></d>', 1, 1, '') END ,rn=ROW_NUMBER() OVER (PARTITION BY ItemID ORDER BY (SELECT NULL)) FROM @t CROSS APPLY ( SELECT STUFF(strcol, CHARINDEX(';', strcol), 1, '<inv_number>')) a(inv_number) CROSS APPLY ( SELECT STUFF(inv_number, CHARINDEX(';', inv_number), 1, '</inv_number><vat>')) b(vat) CROSS APPLY ( SELECT STUFF(vat, CHARINDEX(';', vat), 1, '</vat><amount>')) c(amount) CROSS APPLY ( SELECT STUFF(amount, CHARINDEX(';', amount), 1, '</amount><deliveryPlace>')) d(deliveryPlace) CROSS APPLY ( SELECT STUFF(strcol, CHARINDEX(';', strcol), 1, '<itemDescription>')) e(itemDescription) CROSS APPLY ( SELECT STUFF(itemDescription, CHARINDEX(';', itemDescription), 1, '</itemDescription><color>')) f(color) CROSS APPLY ( SELECT STUFF(color, CHARINDEX(';', color), 1, '</color><qty>')) g(qty) ), CreateXML2 AS ( SELECT ItemID ,xmlcol=CAST(( SELECT CASE WHEN SUBSTRING(xmlcol, 2, 1) = 'h' THEN '<ItemID>' + CAST(ItemID AS VARCHAR(5)) + '</ItemID> ' ELSE '' END + xmlcol FROM CreateXML b WHERE a.ItemID = b.ItemID ORDER BY rn FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)') AS XML) FROM CreateXML a GROUP BY ItemID )INSERT INTO @xSELECT ItemID, xmlcolFROM CreateXML2
-- Extract headersSELECT x.row.value('(.)[1]', 'INT') AS ItemID ,x.row.value('(/h/inv_number)[1]', 'VARCHAR(50)') AS inv_number ,x.row.value('(/h/vat)[1]', 'VARCHAR(50)') AS vat ,x.row.value('(/h/amount)[1]', 'MONEY') AS amount ,x.row.value('(/h/deliveryPlace)[1]', 'VARCHAR(50)') AS deliveryPlaceFROM @xCROSS APPLY xmlcol.nodes('/ItemID') AS x(row)-- Extract detailsSELECT y.row.value('(.)[1]', 'VARCHAR(50)') AS ItemID ,x.row.value('(/h/inv_number)[1]', 'VARCHAR(50)') AS inv_number ,x.row.value('(./itemDescription)[1]', 'VARCHAR(50)') AS itemDescription ,x.row.value('(./color)[1]', 'VARCHAR(50)') AS color ,x.row.value('(./qty)[1]', 'INT') AS qtyFROM @xCROSS APPLY xmlcol.nodes('/d') AS x(row)CROSS APPLY xmlcol.nodes('/ItemID') AS y(row)