SQL XML选择值

SQL XML选择值,sql,xml,Sql,Xml,我如何选择此报表中的“值” <int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int> 我试过了 DECLARE @XML XML SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>' SELECT @XML.value(

我如何选择此报表中的“值”

<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>
我试过了

DECLARE @XML XML
SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>'

SELECT  @XML.value('(/int)[1]', 'varchar(30)')
FROM    @xml.nodes('/int') Tbl ( Col )
但我不返回任何值。

尝试以下操作

DECLARE @XML XML
SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>'

SELECT Col.value('(.)[1]', 'int')
FROM @xml.nodes('//*') As Tbl (Col )

您可以为名称空间定义别名,然后在xpath中使用该别名

如果不指定名称空间,xpath只能查找没有名称空间的标记

或者可以在xpath中查找任何名称空间*:

例如:


请注意方法1如何仅查找第一个值,而方法2如何查找两个值。

这个问题是您的XML位于已定义的名称空间中,并且您正在尝试使用默认名称空间进行选择

要解决此问题,应在选择中定义命名空间:

DECLARE @XML XML
SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>'

SELECT @XML.value('declare namespace ns="http://schemas.microsoft.com/2003/10/Serialization/"; (/ns:int)[1]', 'varchar(30)' )  
FROM   @xml.nodes('/') Tbl ( Col )
DECLARE @XML XML
SET @XML = '<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">247734</int>'

SELECT @XML.value('declare namespace ns="http://schemas.microsoft.com/2003/10/Serialization/"; (/ns:int)[1]', 'varchar(30)' )  
FROM   @xml.nodes('/') Tbl ( Col )