为什么OPENXML只返回一个元素

sac*_*haa 3 xml t-sql sql-server openxml

有人可以解释一下为什么这个T-SQL代码只返回一行值为"1"的行?我期待得到两行("1"和"2").我在这里错过了什么吗?

DECLARE @XMLDoc2 XML
SELECT @XMLDoc2 = '<ids><id>1</id><id>2</id></ids>'

DECLARE @handle2 INT

EXEC sp_xml_preparedocument @handle2 OUTPUT, @XMLDoc2

SELECT * FROM OPENXML (@handle2, '/ids', 2) WITH (id INT 'id') 

EXEC sp_xml_removedocument @handle2
Run Code Online (Sandbox Code Playgroud)

注意:我正在使用SQL Server 2008

非常感谢!

小智 10

我有同样的问题,我在另一个网站上找到了答案.您必须使用'/ ids/id'而不是'/ ids',然后使用'.' 在WITH子句中.

DECLARE @XMLDoc2 XML 
SELECT @XMLDoc2 = '<ids><id>1</id><id>2</id></ids>' 

DECLARE @handle2 INT 

EXEC sp_xml_preparedocument @handle2 OUTPUT, @XMLDoc2 

SELECT * FROM OPENXML (@handle2, '/ids/id', 2) WITH (id INT '.')  

EXEC sp_xml_removedocument @handle2 
Run Code Online (Sandbox Code Playgroud)


mar*_*c_s 9

为什么不在SQL Server 2005及更高版本中对XML变量使用新的.nodes()方法?

DECLARE @XMLDoc2 XML
SELECT @XMLDoc2 = '<ids><id>1</id><id>2</id></ids>'


SELECT
   ids.id.value('.', 'int') 'id'
FROM 
   @xmldoc2.nodes('/ids/id') ids(id)
Run Code Online (Sandbox Code Playgroud)

这给了我预期的"1"和"2"值.


Rem*_*anu 7

忘记openxml无意义,缓慢,繁琐,无法使用和糟糕的四周.使用XML方法,它们快速,直观,用户友好并且善于渗透:

DECLARE @XMLDoc2 XML
SELECT @XMLDoc2 = '<ids><id>1</id><id>2</id></ids>'

select x.value(N'.', N'int') as id
from @XMLDoc2.nodes(N'/ids/id') t(x);
Run Code Online (Sandbox Code Playgroud)

  • 嗯,我急着推出"用善良渗出",我喜欢它的声音;) (2认同)