【发布时间】:2014-04-09 08:30:41
【问题描述】:
我知道如何在最简单的情况下做到这一点,例如
DECLARE @commaSeparatedValues NVARCHAR(MAX)
DECLARE @xml XML = N'<id>1</id>
<name>test</name>
<istest>1</istest>'
;WITH nodes AS
(
SELECT Tbl.Col.value('.', 'nvarchar(max)') as Value
FROM @xml.nodes('*/text()') Tbl(Col)
),
prepareStrings
AS
(
SELECT IIF(ISNUMERIC(n.value) = 1, n.Value, '''' + n.Value + '''') AS Value
FROM nodes n
)
SELECT @commaSeparatedValues = CASE WHEN @commaSeparatedValues IS NULL THEN s.Value ELSE @commaSeparatedValues + ',' + s.value END
FROM prepareStrings s
SELECT @commaSeparatedValues as csv
这非常有效。当我想以这种方式解析以下 xml 数据时,就会出现问题。 我在编写正确的查询时遇到问题。
DECLARE @xml XML = N'
<e>
<id>1</id>
<name>test</name>
<istest>1</istest>
</e>
<e>
<id>2</id>
<name>test2</name>
<istest>0</istest>
</e>
'
我可以通过使用逐行获取元素
select Tbl.col.query('.') as [xml]
from @xml.nodes('e') Tbl(col)
我不知道如何继续前进。不知道如何使用此查询,现在查询 [xml] 列。
【问题讨论】:
标签: sql-server xml tsql xquery