sql-server - 将 1 对 n XML 列转换为表格数据

标签 sql-server xml

我在 MS SQL Server 上有一个表,其中保存有关 XML 格式的报告的信息。该表由两个字段组成:第一个字段包含业务键,第二个字段包含 XML 格式的整个报告。

这些报告每份都包含几张图片。 XML 保存有关这些图片的信息,例如文件名、拍摄日期等。我想将这些信息提取到一个表中,其中每条记录都保存有关一张照片的信息。我已经找到了非常接近的方法来做到这一点,但我不断遇到的问题是我需要在此表中为源表中的每条记录创建多条记录。我怎样才能做到这一点?

业务 key 也需要出现在最终表中。该业务键可以在 XML 数据中找到,但在源表(如前所述)中也有一个单独的字段可以找到它。 XML 列的内容可能类似于以下内容:

<Report>
  <ReportKey>0000001</ReportKey>
  [...]
  <Photos>
    <Photo>
      <Filename>1.jpg</Filename>
      <Date>01-01-2015</Date>
    </Photo>
    <Photo>
      <Filename>2.jpg</Filename>
      <Date>01-01-2016</Date>
    </Photo>
    [...]
  </Photos>
  [...]
</Report>

我希望决赛 table 看起来像这样:

+---------+----------+------------+
|   Key   | Filename |    Date    |
+---------+----------+------------+
| 0000001 | 1.jpg    | 01-01-2015 |
| 0000001 | 2.jpg    | 01-01-2016 |
+---------+----------+------------+

最佳答案

不是答案,但很重要,因此不需发表评论:

对日期格式要非常小心。我不知道您的 XML 是如何生成的,但 XML 中的日期应该是 ISO 8601(yyyy-mm-ddyyyy-mm-ddThh: mm:ss)。

您的格式取决于文化!!!

试试这个:

set language french;
declare @xml as xml ='<x><Date>08-03-2015</Date></x>';
select @xml.value('(/x/Date)[1]','datetime');

set language english;
select @xml.value('(/x/Date)[1]','datetime');

你看到结果不同了吗?

现在尝试将日期设置为 3 月 13 日。甚至还有转换异常!

关于sql-server - 将 1 对 n XML 列转换为表格数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37031495/

相关文章:

json - 对于 JSON 路径格式

.net - 如何让 ASP.NET 输出 UTF-16 编码的文本?

java - 要查看的自定义 xml 文件

mysql - 未订购的客户

c++ - 我应该如何避免 SQL 超时?

xml - Magento checkout.xml 文件无法识别

sql - 获取嵌套的 XML 输出 sql server

xml - XML 名称中是否允许增补字符?

sql-server - 给定2个表,如何将它们合并到 View 中?

sql - SQL 中日期格式的问题