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?
 
    

