I am trying to create a temp table and insert rows from a long string '!*|*!'
.
This is what I have:
Declare @value varchar(max) = '70!|!none!|!none!|!J500!|!JOHNSON & JOHNSON HEALTHCARE SYSTEM!|!N!|!77836092!|!???!*|*!70!|!05/28/2017!|!05/25/2017!|!J500!|!JOHNSON & JOHNSON HEALTHCARE SYSTEM!|!N!|!77836093!|!???!*|*!70!|!none!|!none!|!ALLERGAN USA, INC.[A475]!|!Y!|!N!|!GERIMEDB0A!|!???!*|*!70!|!none!|!none!|!J500!|!JOHNSON & JOHNSON HEALTHCARE SYSTEM!|!N!|!77836095!|!???!*|*!70!|!none!|!none!|!J500!|!JOHNSON & JOHNSON HEALTHCARE SYSTEM!|!N!|!77836095!|!???!*|*!70!|!none!|!none!|!J500!|!JOHNSON & JOHNSON HEALTHCARE SYSTEM!|!N!|!77836094!|!???!*|*!'
DECLARE @my1 VARCHAR(500)
DECLARE @my2 VARCHAR(500)
DECLARE @my3 VARCHAR(500)
DECLARE @my4 VARCHAR(500)
DECLARE @my5 VARCHAR(500)
DECLARE @my6 VARCHAR(500)
DECLARE @my7 VARCHAR(500)
DECLARE @my8 VARCHAR(500)
SELECT @my1 = ltrim(rtrim(xDim.value('/x[1]', 'varchar(max)')))
,@my2 = ltrim(rtrim(xDim.value('/x[2]', 'varchar(max)')))
,@my3 = ltrim(rtrim(xDim.value('/x[3]', 'varchar(max)')))
,@my4 = ltrim(rtrim(xDim.value('/x[4]', 'varchar(max)')))
,@my5 = ltrim(rtrim(xDim.value('/x[5]', 'varchar(max)')))
,@my6 = ltrim(rtrim(xDim.value('/x[6]', 'varchar(max)')))
,@my7 = ltrim(rtrim(xDim.value('/x[7]', 'varchar(max)')))
,@my8 = ltrim(rtrim(xDim.value('/x[8]', 'varchar(max)')))
FROM (
SELECT Cast('<x>' + replace((
SELECT replace(@value, '!*|*!', '§§Split§§') AS [*]
FOR XML Path('')
), '§§Split§§', '</x><x>') + '</x>' AS XML) AS xDim
) AS A
SELECT @my1 ...
It works, but the problem with it is that it only allows for a finite number of delimited strings. I need unlimited so I am trying to change it to insert into a temp table.
Declare @value varchar(max) = '70!|!none!|!none!|!J500!|!JOHNSON & JOHNSON HEALTHCARE SYSTEM!|!N!|!77836092!|!???!*|*!70!|!05/28/2017!|!05/25/2017!|!J500!|!JOHNSON & JOHNSON HEALTHCARE SYSTEM!|!N!|!77836093!|!???!*|*!70!|!none!|!none!|!ALLERGAN USA, INC.[A475]!|!Y!|!N!|!GERIMEDB0A!|!???!*|*!70!|!none!|!none!|!J500!|!JOHNSON & JOHNSON HEALTHCARE SYSTEM!|!N!|!77836095!|!???!*|*!70!|!none!|!none!|!J500!|!JOHNSON & JOHNSON HEALTHCARE SYSTEM!|!N!|!77836095!|!???!*|*!70!|!none!|!none!|!J500!|!JOHNSON & JOHNSON HEALTHCARE SYSTEM!|!N!|!77836094!|!???!*|*!'
DROP TABLE #TempTable
CREATE TABLE #TempTable ([row] varchar(max))
DECLARE @my1 VARCHAR(500)
SELECT @my1 = ltrim(rtrim(xDim.value('/x[1]', 'varchar(max)')))
FROM (
SELECT Cast('<x>' + replace((
SELECT replace(@value, '!*|*!', '§§Split§§') AS [*]
FOR XML Path('')
), '§§Split§§', '</x><x>') + '</x>' AS XML) AS xDim
) AS A
INSERT INTO #TempTable ([row])
SELECT @my1
select * from #TempTable
This, as you can probably see only inserts 1 row. Row do I iterate through the length of the string and insert for each delimitation?