Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
Sql server 将值从连接的字符串提取到表中_Sql Server - Fatal编程技术网

Sql server 将值从连接的字符串提取到表中

Sql server 将值从连接的字符串提取到表中,sql-server,Sql Server,在我的存储过程中,有一个串联值列表被传递到一个参数中,我需要拆分这些值 我的列表中可能有30个值,我已经显示了一些。我想将它们存储在可诱惑的/table变量中 CREATE PROCEDURE SAMPLE (@LIST VARCHAR(MAX),@USERNUM BIGINT,@COUNTRYNO BIGINT) EXEC SAMPLE 'NAME:bankNO:branchNme:accountNbr:chequeddNbr:chequeddDte:payeeNme:branchC

在我的存储过程中,有一个串联值列表被传递到一个参数中,我需要拆分这些值

我的列表中可能有30个值,我已经显示了一些。我想将它们存储在可诱惑的/table变量中

CREATE PROCEDURE SAMPLE (@LIST VARCHAR(MAX),@USERNUM BIGINT,@COUNTRYNO BIGINT)

EXEC SAMPLE
    'NAME:bankNO:branchNme:accountNbr:chequeddNbr:chequeddDte:payeeNme:branchCode'
    ,1,12001
所需输出:

sno  list            val1  val2  val3  val4  val5  val6 val7
1   1:2:3:4:5:6:7     1     2     3    4      5     6    7

您可以使用标准字符串拆分器,如Jeff Moden的DelimitedSplit8K:

如果需要将数据放入单独的列中,请将其与PIVOT一起使用:

SELECT 1 as sno, [1], [2], [3], [4], [5], [6], [7] 
FROM (
    SELECT 
        Item, 
        ItemNumber 
    from 
        dbo.DelimitedSplit8K ('A:B:C:1:2:3:4',':')
) AS S
PIVOT
(
    max(Item) FOR ItemNumber IN ([1], [2], [3], [4], [5], [6], [7])
) AS PivotTable;
结果:

sno 1   2   3   4   5   6   7
1   A   B   C   1   2   3   4

使用
XML
拆分列表,使用
PIVOT
将列表转换为列

DECLARE @TempTable AS TABLE(Value VARCHAR(100), id int)
DECLARE @list AS VARCHAR(1000)

SET @list = 'NAME:bankNO:branchNme:accountNbr:chequeddNbr:chequeddDte:payeeNme:branchCode'

INSERT INTO @TempTable
 SELECT 
     Split.a.value('.', 'VARCHAR(100)') AS CVS , ROW_NUMBER() OVER(ORDER BY Split.a.value('.', 'VARCHAR(100)')) 
  FROM  
  (
    SELECT CAST ('<M>' + REPLACE(@list, ':', '</M><M>') + '</M>' AS XML) AS CVS 
  ) AS A CROSS APPLY CVS.nodes ('/M') AS Split(a)


  SELECT 1 as sno, @list AS List, * FROM @TempTable
  pivot(MAX(Value) FOR id in([1],[2],[3],[4],[5],[6],[7],[8])) AS Piv
将@tentable声明为表(值VARCHAR(100),id int)
将@list声明为VARCHAR(1000)
SET@list='NAME:bankNO:branchname:accountNbr:chequeddNbr:chequeddDte:payename:branchCode'
插入@attreable
挑选
将.a.value('.','VARCHAR(100)')拆分为CV,行号()超过(按拆分.a.value('.','VARCHAR(100)')排序)
从…起
(
选择CAST(''+REPLACE(@list',:'','')+''作为XML)作为CVS
)交叉应用CVS.nodes('/M')作为拆分(A)
选择1作为sno,@list作为list,*FROM@tentable
作为Piv的轴([1]、[2]、[3]、[4]、[5]、[6]、[7]、[8])中id的最大值

Ok首先移除大写锁定,并用示例数据和预期输出重新键入问题。请不要在编写时使用大写锁定。。。还有,格式代码和样本数据。你能用小写形式修改问题吗:)我怀疑我是否得到了输出格式。请显示您在SP中提供的输入的确切输出。您到底想要什么?清晰地显示样本数据和预期输出。。
DECLARE @TempTable AS TABLE(Value VARCHAR(100), id int)
DECLARE @list AS VARCHAR(1000)

SET @list = 'NAME:bankNO:branchNme:accountNbr:chequeddNbr:chequeddDte:payeeNme:branchCode'

INSERT INTO @TempTable
 SELECT 
     Split.a.value('.', 'VARCHAR(100)') AS CVS , ROW_NUMBER() OVER(ORDER BY Split.a.value('.', 'VARCHAR(100)')) 
  FROM  
  (
    SELECT CAST ('<M>' + REPLACE(@list, ':', '</M><M>') + '</M>' AS XML) AS CVS 
  ) AS A CROSS APPLY CVS.nodes ('/M') AS Split(a)


  SELECT 1 as sno, @list AS List, * FROM @TempTable
  pivot(MAX(Value) FOR id in([1],[2],[3],[4],[5],[6],[7],[8])) AS Piv