sql - XML 到 SQL Server 解析问题

标签 sql sql-server xml

我正在解析 XML 并尝试获取节点的所有属性/值。

declare @XBL xml='
<Root>
      <Department>
             <Employees>
                <Employee type="temp">
                 Jason
                </Employee>
                <Employee type="perm">
                 Roy
                </Employee>
             </Employees>
      </Department>
      <Department>
             <Employees >
                <Employee type="temp2">
                 Kevin
                </Employee>
             </Employees>
      </Department>
</Root>'

SELECT  
    [Type] = XC.value('(@type)[1]', 'varchar(25)'),
       [Name] = XC.value('(../Employee)[1]' , 'varchar(30)')
FROM
    @XBL.nodes('Root/Department/Employees/Employee') AS XTbl(XC)

上述查询的输出 为我提供了所有属性,但只有第一个值(Jason)。

Type  Name 
temp  Jason
perm  Jason
temp2 Kevin 

预期输出:

Type  Name 
temp  Jason
perm  Roy
temp2 Kevin

最佳答案

这应该是你想要的:

SELECT XBL.E.value('@type','varchar(25)') AS [Type],
       XBL.E.value('(./text())[1]','varchar(30)') AS [Name]
FROM @XBL.nodes('Root/Department/Employees/Employee') XBL(E);

还要注意 /text() 的使用。从节点内部返回数据时,添加 /text() 实际上可以提高查询的性能。

编辑:此外,根据您的示例 xml,[Name] 返回的值实际上是 '{Line break} Jason{Line break}'(显然用实际字符替换换行符)。这是您的意图,还是您也希望删除空格和换行符/回车符?

关于sql - XML 到 SQL Server 解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175407/

相关文章:

使用 MySQL Workbench 添加外键时出现 MySQL 错误 1064

php mysql查询经纬度语法

SQL 查询Where 子句为空或匹配(仅返回1)?

mysql - SQL:查找在给定品牌列表中拥有属性的所有用户。

xml - 如何在 jquery 中验证 xml 字符串?

java - Android 通过 strings.xml 中的值进行切换

sql - 复合类型的多个插入

sql - 什么是索引以及如何使用它们来优化数据库中的查询?

c# - 如何将 XML 数据解析为自定义 C# 类的属性?

mysql - 如何在 MySQL 中进行算术运算