Sql server 将值从连接的字符串提取到表中
在我的存储过程中,有一个串联值列表被传递到一个参数中,我需要拆分这些值 我的列表中可能有30个值,我已经显示了一些。我想将它们存储在可诱惑的/table变量中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
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