Hi @jn93 ,
Please try the following solution.
It will work starting from SQL Server 2012 onwards.
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (AUTONUM VARCHAR(50), UKEY VARCHAR(50), INSCODE VARCHAR(50), ACTION_TIMESTAMP VARCHAR(50))
INSERT INTO @tbl (AUTONUM, UKEY, INSCODE, ACTION_TIMESTAMP) VALUES
('2287250^2287307^2287308','91TMIQUO6123265^91TMIQUO6123265^91TMIQUO6123265','91^91^91','20220817163329^20220817165355^20220817165358'),
('2287288^2287303^2287304','91TMIQUO6124293^91TMIQUO6124293^91TMIQUO6124293','91^91^91','20220817164753^20220817165318^20220817165322');
-- DDL and sample data population, end
DECLARE @separator CHAR(1) = '^';
;WITH rs AS
(
SELECT *
FROM @tbl AS t
CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA[' +
REPLACE(AUTONUM, @separator, ']]></r><r><![CDATA[') +
']]></r></root>' AS XML)) AS t1(a)
CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA[' +
REPLACE(UKEY, @separator, ']]></r><r><![CDATA[') +
']]></r></root>' AS XML)) AS t2(b)
CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA[' +
REPLACE(INSCODE, @separator, ']]></r><r><![CDATA[') +
']]></r></root>' AS XML)) AS t3(c)
CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA[' +
REPLACE(ACTION_TIMESTAMP, @separator, ']]></r><r><![CDATA[') +
']]></r></root>' AS XML)) AS t4(d)
), rs_AUTONUM AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS ID
, t.c.value('(./text())[1]', 'VARCHAR(50)') AS AUTONUM
FROM rs CROSS APPLY a.nodes('/root/r') AS t(c)
)
, rs_UKEY AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS ID
, t.c.value('(./text())[1]', 'VARCHAR(50)') AS UKEY
FROM rs CROSS APPLY b.nodes('/root/r') AS t(c)
), rs_INSCODE AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS ID
, t.c.value('(./text())[1]', 'VARCHAR(50)') AS INSCODE
FROM rs CROSS APPLY c.nodes('/root/r') AS t(c)
), rs_ACTION_TIMESTAMP AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS ID
, t.c.value('(./text())[1]', 'VARCHAR(50)') AS ACTION_TIMESTAMP
FROM rs CROSS APPLY d.nodes('/root/r') AS t(c)
)
SELECT x1.*, UKEY, INSCODE, ACTION_TIMESTAMP
FROM rs_AUTONUM AS x1 INNER JOIN rs_UKEY AS x2 ON x1.ID = x2.ID
INNER JOIN rs_INSCODE AS x3 ON x2.ID = x3.ID
INNER JOIN rs_ACTION_TIMESTAMP AS x4 ON x3.ID = x4.ID;
Output
+----+---------+-----------------+---------+------------------+
| ID | AUTONUM | UKEY | INSCODE | ACTION_TIMESTAMP |
+----+---------+-----------------+---------+------------------+
| 1 | 2287250 | 91TMIQUO6123265 | 91 | 20220817163329 |
| 2 | 2287307 | 91TMIQUO6123265 | 91 | 20220817165355 |
| 3 | 2287308 | 91TMIQUO6123265 | 91 | 20220817165358 |
| 4 | 2287288 | 91TMIQUO6124293 | 91 | 20220817164753 |
| 5 | 2287303 | 91TMIQUO6124293 | 91 | 20220817165318 |
| 6 | 2287304 | 91TMIQUO6124293 | 91 | 20220817165322 |
+----+---------+-----------------+---------+------------------+