sql - 如何让 SQL Server XQUERY 返回 "There is no element named [Element]"以外的内容

标签 sql sql-server sql-server-2008 xquery

如果在其他地方回答了这个问题,我们深表歉意。我不断收到错误消息
XQuery [Mytable.XMLData.nodes()]:没有名为“Answer”的元素

SELECT 
ref.value('/','nvarchar(1000)')
FROM   Mytable CROSS APPLY xmldata.nodes('Answer') R(ref)

——
--XML of Row
<Answer xmlns="http://TempNameSpace.com/AnswerData.xsd" Type="Deliverable">
  <Deliverable>
    <Title>test</Title>
    <Description>test</Description>
    <DueDate>2010-02-16T08:59:59</DueDate>
  </Deliverable>
</Answer>

我已经尝试了几种不同的变体来获取根节点(“答案”)或任何子节点
但是,如果我将声明更改为阅读
SELECT 
ref.value('/','nvarchar(1000)')
FROM   Mytable CROSS APPLY xmldata.nodes('/') R(ref)

我得到了结果
testtest2010-02-16T08:59:59

我最终会喜欢表格格式的数据,比如
SELECT 
    ref.value('/Title','nvarchar(1000)') as Title
    ref.value('/Description','nvarchar(1000)') as Description

etc..
    FROM   Mytable CROSS APPLY xmldata.nodes('/Deliverable') R(ref)

谢谢你的帮助

最佳答案

您没有注意正在使用的 XML 命名空间:

<Answer xmlns="http://TempNameSpace.com/AnswerData.xsd" Type="Deliverable" 
        **********************************************

您需要在查询时考虑到这一点 - 执行以下操作:
;WITH XMLNAMESPACES('http://TempNameSpace.com/AnswerData.xsd' AS ns)
SELECT 
  ref.value('(ns:*)[1]', 'nvarchar(1000)')
FROM Mytable 
CROSS APPLY xmldata.nodes('/ns:Answer') R(ref)

您需要引用 <Answer> 中的所有内容与 ns: XML 命名空间前缀。

关于sql - 如何让 SQL Server XQUERY 返回 "There is no element named [Element]"以外的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2359289/

相关文章:

sql - 使用从表中收集的值创建 SQL INSERT 脚本

sql-server-2008 - 在 SQL Express 2008 中访问未配置的数据库时,本地服务帐户默认具有哪些权限?

java - PostgreSQL - 整数 [] 最佳实践

mysql - Doctrine2 条件关系

sql - 如何在SQL中选择 'previous'和 'next'记录?

sql-server - SSIS 导入 Excel 日期时出错(截断错误)

php - 将多个值连接成一行可以在 MySQL 控制台中使用,但不能在 PHP 中使用

php - 是否可以在两个不同的数据库之间进行外部连接

mysql - 如何比较两个表并显示每个差异

sql-server - 转换为具有指定小数位数的小数