将XML标头信息提取到SQL Server中

时间:2015-07-09 14:48:46

标签: sql-server xml ssis

我的流程涉及每天获取一个大型XML文件。 我开发了一个SSIS包(2008 r2),它首先通过XSLT删除多个命名空间,然后使用XML源对象将数据导入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源使用其嵌套属性导入所有Orders。如何提取报告日期&#39;和&#39;生成&#39;从标题?

非常感谢任何帮助。

由于 SD

1 个答案:

答案 0 :(得分:0)

您可以使用XML方法value()传递正确的XPath / XQuery表达式作为参数。对于演示,请考虑以下表格和数据:

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)

您可以使用以下查询获取generatedreport_date数据:

SELECT
    t.MyXmlColumn.value('(/*/generated)[1]','datetime') as generated
    , t.MyXmlColumn.value('(/*/report_date)[1]','date') as report_date
FROM Mytable t

<强> SQL Fiddle Demo

输出

generated               report_date
----------------------- -----------
2015-04-28 00:59:38.000 2015-04-27