我試圖創建一個臨時表並從長字符串'!*|*!'
插入行。將字符串/ varchar分隔成插入到#temp表中的行
這是我有:
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 ...
它的工作原理,但它存在的問題是,它僅允許有限數量的分隔字符串的。我需要無限制,所以我想改變它插入臨時表。
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
這個,你可能會看到只能插入1行。行是否遍歷字符串的長度併爲每個定界插入?
您需要爲行分割一次,然後再爲列分割一次。 –