sql-server - 从 XML 节点查询值(可能是 NAMESPACE 问题)

标签 sql-server xml sql-server-2008-r2 xquery-sql

我曾处理过查询 XML,我认为它应该是一个非常简单的查询。

我的数据以 XML 格式存储,例如:

declare @data xml = 
'<data-set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Row>
        <Dept>DepartmentName</Dept>
        <FirstName>John</FirstName>
        <LastName>Smith</LastName>
        <Alias>JSmith</Alias>
        <PhoneNo>5555555555</PhoneNo>
        <Email>JSmith@company.com</Email>
        <AcctNo>123456</AcctNo>
    </Row>
    <Row>
    ...
    </Row>
</data-set>'

我正在查询它:

;WITH XMLNAMESPACES (DEFAULT 'http://www.w3.org/2001/XMLSchema-instance')
select
C.value('/Row[1]/Email[1]','varchar(max)')
C.value('/Row[1]/FirstName[1]','varchar(max)')
from @data.nodes('data-set') as T(C)

我试过在字段后有和没有“[1]”,没有 NAMESPACE 并且我尝试使用 //Email[1]@Email 但我运气不好。有什么建议吗?

最佳答案

你很接近 - 不需要命名空间 - 但你的语法有点偏离 - 试试这个:

select
    C.value('Email[1]', 'varchar(255)'),
    C.value('FirstName[1]', 'varchar(25)')
FROM
    @data.nodes('data-set/Row') as T(C)

XPath 表达式(.value() 调用中的第一个参数)需要放在括号中 - 它应该/(因为它与 .nodes() 调用返回的 XML 片段“相关”)。

关于sql-server - 从 XML 节点查询值(可能是 NAMESPACE 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36295142/

相关文章:

upgrade - SQL Server 2008 R2

sql-server-2008-r2 - MDX 查询不接受日期值

sql-server - 将字符串转换为 xml 并插入 Sql Server

c# - ASP.NET 5 EF7 代码优先迁移默认按字母顺序创建列

xml - 读取XML文件中的文本内容

c# - 使用 NPOI 时出现无法理解的错误

java - 如何找到嵌套在两个不同标签中的两个同名节点的位置?

sql - 如何在 SQL Server 中创建数据集并处理每条记录?

sql-server - Select @@version 和 "About version"的区别

sql - 如何在 SQL 中使用选择查询生成 csv 文件