Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL基于分隔符拆分列,并将拆分字符串数组输入到多个表列中_Sql_Sql Server_Tsql - Fatal编程技术网

T-SQL基于分隔符拆分列,并将拆分字符串数组输入到多个表列中

T-SQL基于分隔符拆分列,并将拆分字符串数组输入到多个表列中,sql,sql-server,tsql,Sql,Sql Server,Tsql,希望基于同一分隔符多次拆分列中的字符串,并将每个字符串数组输入到同一表中的单独表列中,例如 DECLARE @Test VARCHAR(50) SET @Test = '0^5^6^104^0^0^5' 预期产量 试试这个 DECLARE @Test VARCHAR(50) SET @Test = '0^5^6^104^0^0^5' SET @Test = N'SELECT N''' + REPLACE(@Test,'^',''' ,''') + '''' exec(@Test) 请不要将值列

希望基于同一分隔符多次拆分列中的字符串,并将每个字符串数组输入到同一表中的单独表列中,例如

DECLARE @Test VARCHAR(50)
SET @Test = '0^5^6^104^0^0^5'
预期产量

试试这个

DECLARE @Test VARCHAR(50) SET @Test = '0^5^6^104^0^0^5' SET @Test = N'SELECT N''' + REPLACE(@Test,'^',''' ,''') + '''' exec(@Test)
请不要将值列表存储为分隔字符串。这将导致巨大的性能问题。查找任意数量的示例,包括带有动态数据透视的拆分器。人们在不知道编写了什么或甚至没有测试代码的情况下,对其他用户的帖子发表负面评论。在作者回复后,被评论人删除了评论,但没有撤销否定点。这很痛。
DECLARE @Test table (val VARCHAR(50))
insert into @Test (val)values  ('0^5^6^104^0^0^5')




;WITH CTE AS (
SELECT   
     Split.a.value('.', 'VARCHAR(100)') AS String  
 FROM  (SELECT   
         CAST ('<M>' + REPLACE([val], '^', '</M><M>') + '</M>' AS XML) AS String  
     FROM  @Test) AS A CROSS APPLY String.nodes ('/M') AS Split(a))
     Select [1]Col1,[6]Col2,[7]Col3,[4]Col1,[2]Col1,[3]Col1,[5]Col1 from (
     select T.RN,T.String from (
     select Row_number()OVER( ORDER BY string )RN,string from CTE)T)K
     PIVOT(MAX(string) FOR RN IN ([1],[2],[3],[4],[5],[6],[7]))P
DECLARE @Test VARCHAR(50) SET @Test = '0^5^6^104^0^0^5' SET @Test = N'SELECT N''' + REPLACE(@Test,'^',''' ,''') + '''' exec(@Test)
DECLARE @Test VARCHAR(50)
SET @Test = '0^5^6^104^0^0^5'

select * from (
select t.col.value('.','varchar(max)') as val, 'column' + cast(ROW_NUMBER() over (order by (select 1)) as varchar(10)) as rn from
    (
        select cast('<m>' + REPLACE(@test,'^','</m><m>') + '</m>' as xml) as val
    ) as abc
    cross apply abc.val.nodes('/m') as t(col)
              ) as t1
              pivot (max(val) for rn in (column1,column2,column3,column4,column5,column6,column7)) as pvt