如何执行与 OPENXML 相同的操作,但使用 SQL Server 中的nodes() 方法

问题描述 投票:0回答:1

在 SQL Server 中,除了使用 Nodes() 方法之外,与此 OPENXML 命令等效的命令是什么?

DECLARE @MyXML XML = '<data><Row><Name>Name A</Name><Type>T1</Type></Row><Row><Name>Name B</Name><Type>T2</Type></Row></Data>'

DECLARE @ID INT

EXEC SP_XML_PREPAREDOCUMENT @ID OUTPUT, @MyXML

SELECT
    [Value] AS 'Value',
    [Type] AS 'Type'
INTO #temp1
FROM OPENXML (@ID, '/Data/Row', 2)
WITH (
    [Value] NVARCHAR(100)
    [Type] NVARCHAR(100)
)

这是我所能得到的:

SELECT
    aaa.value('.', 'NVARCHAR(100)') AS 'Value'
INTO #temp1
FROM @MyXML.nodes('/Data/Row') AS T(aaa)

我不知道如何填充[类型]字段。

#temp1 基本上应该有 2 行,其中包含“名称”和“类型”列。每行将是:

Name A | T1
Name B | T2
sql sql-server xml t-sql xquery-sql
1个回答
0
投票

不确定为什么您认为

.
会从
Name
节点获取结果,这只会为您提供整个外部
Row
节点。您需要
(Name/text())[1]
来代替。并为
Type
节点选择另一列。

SELECT
    x1.datarow.value('(Name/text())[1]', 'NVARCHAR(100)') AS Value,
    x1.datarow.value('(Type/text())[1]', 'NVARCHAR(100)') AS Type
FROM @MyXML.nodes('/Data/Row') AS x1(datarow);

db<>小提琴

© www.soinside.com 2019 - 2024. All rights reserved.