在 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
不确定为什么您认为
.
会从 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);