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)
为什么不在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"值.
忘记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)
| 归档时间: |
|
| 查看次数: |
4730 次 |
| 最近记录: |