我在 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-dd
或 yyyy-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/