xml - 挑战 - 将 XML 处理成 T-SQL 表结构?

标签 xml tsql

如果您有此 XML:

<people>
  <person id="1">
    <firstname>John</firstname>
    <surname>Doe</surname>
  </person>
  <person id="2">
    <firstname>Mary</firstname>
    <surname>Jane</surname>
  </person>
</people>

你想要这张 table :

id  firstname  surname
--- ---------- ----------
1   John       Doe
2   Mary       Jane

您将如何使用 T-SQLXML 获取它?

并加入 Spanner :假设您知道 <person> 的深度, <firstname><surname>元素,但你不知道它们叫什么!

如果您认为将其发布到 reddit 上更好,请随意喷火:)

最佳答案

我建议使用 XQuery 接口(interface),而不是相当笨重的旧 OPENXML 方法:

SELECT
    Ppl.Person.value('(@id)[1]', 'int') AS 'ID',
    Ppl.Person.value('(firstname)[1]', 'varchar(20)') AS 'First Name',
    Ppl.Person.value('(surname)[1]', 'varchar(20)') AS 'Last Name'
FROM
    @input.nodes('/people/person') as Ppl(Person)

这是在 SQL Server 2005 及更高版本中执行此操作的首选方法。

输出是一样的:

ID  First Name  Last Name
1    John             Doe
2    Mary             Jane

但是,如果您不了解 XML 结构,您将无法真正做到这一点......

关于xml - 挑战 - 将 XML 处理成 T-SQL 表结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3188200/

相关文章:

sql - SSRS 报告生成器 : Creating text color expression based on textbox value?

sql-server - 为什么不能将 GETDATE() 用作过程参数的默认值或 EXECUTE 语句中的值?

sql - TSQL - 选择具有相同列 A 但不同列 B 的行

c# - 如何在 C# 中读取 XML 属性?

regex - 结合删除标签正则表达式和删除 sed 中的空行 - Unix

sql-server - 如何创建损坏的 .bak 文件进行测试?

sql-server - sp_executesql 中的命名参数

java - 添加一个新的可绘制对象,它正在更改已解析的 xml 的图标

c# - 下拉列表中的选定元素应显示相关详细信息

java - Android 颜色在我的物理设备上不起作用