为下面的示例中的所有参数值生成连接到单列的输出的简单方法是什么,这个xml中没有ns并且我使用SQL Server 2012。
我尝试获取此输出,在xml示例的片段下方生成3列,并且我想制作1。
100 | Param1
,Param22
,Param3322
XML&代码:
DECLARE @xml XML = '<Parameters>
<Parameter>
<Name>Param1</Name>
</Parameter>
<Parameter>
<Name>Param22</Name>
</Parameter>
<Parameter>
<Name>Param3322</Name>
</Parameter> </Parameters> '
SELECT 100 id
,@XML xmlinfo
INTO #t -- drop table #t -- select * from #t
DECLARE @xml XML = (
SELECT xmlinfo
FROM #t
)
SELECT (
SELECT ID
FROM #t
) AS ID
,X.STockData.query('Name[1]').value('.', 'Varchar(10)') AS 'Parameter'
---CONCAT(X.STockData.query('Name[1]').value('.','Varchar(10)'),X.STockData.query('Name[2]').value('.','Varchar(10)')) AS 'Parameter'
FROM @xml.nodes('Parameters/Parameter') AS X(StockData)
答案 0 :(得分:1)
您可以使用XQuery for
循环从XML字段构造逗号分隔值,例如:
SELECT
t.ID as ID
, CAST(t.xmlinfo.query('
for $p in Parameters/Parameter
return
if ($p is (Parameters/Parameter[last()])[1])
then string($p/Name[1])
else concat($p/Name[1], ", ")
')
AS VARCHAR(MAX)
) as Parameter
FROM MyTable as t
<强> Sqlfiddle Demo 强>
上面的XQuery只是循环遍历Parameter
元素,如果当前Name
是最后一个Parameter
,则返回Parameter
子元素,否则返回Name
连接Imports System
Imports System.Text.RegularExpressions
Public Module Module1
Public Sub Main()
Dim data As String = "M123456789^M123^C123^M1234^"
Dim m As Match = Regex.Match(data, "(M[^\^]+\^)")
While m.Success
Console.WriteLine(m.Groups(1))
m = m.NextMatch()
End While
End Sub
End Module
逗号。
答案 1 :(得分:0)
SELECT (
SELECT ID
FROM #t
) AS ID
,X.STockData.query('Name[1]').value('.', 'Varchar(10)')
+ ', ' + X.STockData.query('Name[2]').value('.', 'Varchar(10)')
+ ', ' + X.STockData.query('Name[3]').value('.', 'Varchar(10)')
as parameter
FROM @xml.nodes('Parameters/Parameter') AS X(StockData)
试试这个