将 XML header 信息提取到 SQL 服务器
Extract XML header information into SQL server
我的流程涉及每天获取一个大型 XML 文件。
我开发了一个 SSIS 包 (2008 r2),它首先通过 XSLT 摆脱了多个命名空间,然后使用 XML 源 object 将数据导入 40 个表(由于其复杂性)。
这是测试xml文件的简化版本
<?xml version="1.0" encoding="UTF-8"?>
<s:Test xmlns:s="http://@@@.@@.com/xml"
<sequence>62</sequence>
<generated>2015-04-28T00:59:38</generated>
<report_date>2015-04-27</report_date>
<orders>
<order>
</order>
</orders>
我的问题是:XML 源导入所有具有嵌套属性的订单。如何从 header 中提取 'report_date' 和 'generated'?
如有任何帮助,我们将不胜感激。
谢谢
标准差
您可以使用 XML 方法 value()
传递适当的 XPath/XQuery 表达式作为参数。对于演示,请考虑以下 table 和数据:
CREATE TABLE MyTable (id int, MyXmlColumn XML)
DECLARE @data XML = '<?xml version="1.0" encoding="UTF-8"?>
<s:Test xmlns:s="http://@@@.@@.com/xml">
<sequence>62</sequence>
<generated>2015-04-28T00:59:38</generated>
<report_date>2015-04-27</report_date>
<orders>
<order>
</order>
</orders>
</s:Test>'
INSERT INTO Mytable VALUES(1,@data)
您可以使用以下查询获取 generated
和 report_date
数据:
SELECT
t.MyXmlColumn.value('(/*/generated)[1]','datetime') as generated
, t.MyXmlColumn.value('(/*/report_date)[1]','date') as report_date
FROM Mytable t
输出:
generated report_date
----------------------- -----------
2015-04-28 00:59:38.000 2015-04-27
我的流程涉及每天获取一个大型 XML 文件。 我开发了一个 SSIS 包 (2008 r2),它首先通过 XSLT 摆脱了多个命名空间,然后使用 XML 源 object 将数据导入 40 个表(由于其复杂性)。
这是测试xml文件的简化版本
<?xml version="1.0" encoding="UTF-8"?>
<s:Test xmlns:s="http://@@@.@@.com/xml"
<sequence>62</sequence>
<generated>2015-04-28T00:59:38</generated>
<report_date>2015-04-27</report_date>
<orders>
<order>
</order>
</orders>
我的问题是:XML 源导入所有具有嵌套属性的订单。如何从 header 中提取 'report_date' 和 'generated'?
如有任何帮助,我们将不胜感激。
谢谢 标准差
您可以使用 XML 方法 value()
传递适当的 XPath/XQuery 表达式作为参数。对于演示,请考虑以下 table 和数据:
CREATE TABLE MyTable (id int, MyXmlColumn XML)
DECLARE @data XML = '<?xml version="1.0" encoding="UTF-8"?>
<s:Test xmlns:s="http://@@@.@@.com/xml">
<sequence>62</sequence>
<generated>2015-04-28T00:59:38</generated>
<report_date>2015-04-27</report_date>
<orders>
<order>
</order>
</orders>
</s:Test>'
INSERT INTO Mytable VALUES(1,@data)
您可以使用以下查询获取 generated
和 report_date
数据:
SELECT
t.MyXmlColumn.value('(/*/generated)[1]','datetime') as generated
, t.MyXmlColumn.value('(/*/report_date)[1]','date') as report_date
FROM Mytable t
输出:
generated report_date
----------------------- -----------
2015-04-28 00:59:38.000 2015-04-27