Sql server Xpath为有效的Xpath表达式返回NULL

Sql server Xpath为有效的Xpath表达式返回NULL,sql-server,xml,xpath,xquery,xml-namespaces,Sql Server,Xml,Xpath,Xquery,Xml Namespaces,我使用一个相当简单的Xpath查询(如下)来查询SQLServer2008数据库列,该列的值都遵循示例(如下)的形式。我的查询为所有行返回NULL,而不是example属性(例如“VALUE”)的值,即使为我查询的每一行定义了example属性 我尝试在Xquery表达式中声明xsd和xsi名称空间,并从多个不同的属性名称中进行选择,但都没有任何效果。我错过了什么 查询: select ColumnName.value('(/RootNode/@example)[1]', 'nvarchar(1

我使用一个相当简单的Xpath查询(如下)来查询SQLServer2008数据库列,该列的值都遵循示例(如下)的形式。我的查询为所有行返回
NULL
,而不是
example
属性(例如“VALUE”)的值,即使为我查询的每一行定义了
example
属性


我尝试在Xquery表达式中声明
xsd
xsi
名称空间,并从多个不同的属性名称中进行选择,但都没有任何效果。我错过了什么

查询

select ColumnName.value('(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
  from TableName
select ColumnName.value('
declare namespace xsd="http://www.w3.org/2001/XMLSchema";
declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance";

(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
  from TableName
XML示例节点(实际的XML包含更多属性,我省略了这些属性):


您需要为xml数据添加默认名称空间,并很可能修改xpath查询

我没有运行此测试,但这是我最好的猜测,应该可以让您继续:

WITH XMLNAMESPACES (N'http://intranet' as intra)
SELECT ColumnName.value('/intra:RootNode[@example]/intra:IsValid[1]', 'nvarchar(15)') [Result]
FROM TableName

这个查询有效。问题在于数据节点声明了一个自定义的默认名称空间

select ColumnName.value('
declare default element namespace "http://intranet";

(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
  from TableName

我没有看到您的查询中提到的名称空间。不是
xsi
xsd
,而是默认设置的
http://intranet
@stenportov我尝试添加这些,但没有什么区别,所以我删除了它们
xsd
xsi
不会有区别,默认名称空间会有区别。我在解密xpath时也遇到了问题。看起来您正在为具有
@example
RootNode
检索
IsValid
,这将是
//RootNode[@example]/IsValid
@stenprov您是对的,它确实与默认名称空间有关。我很快会补充一个答案。谢谢,谢谢,这是我刚才讲的另一个语法。
select ColumnName.value('
declare default element namespace "http://intranet";

(/RootNode/@example)[1]', 'nvarchar(15)') [Result]
  from TableName