LynHou

导航

SSIS中xml的输入输出

输出为XML的两种方法
1.用数据流, 将平面文件作为DES输出
  在SQL里将要输出的数据查询成为单列的字符串: SELECT (SELECT * FROM A FOR XML ROOT('A'),ELEMENTS) AS A
  转换该列的数据类型为 NTEXT
  用平面文件DES接收转换后的列,并保存为.xml格式(而非.txt)

2.用控制流, 在script tast用字节流输出
  在执行SQL里将要输出的数据查询为XML格式 SELECT * FROM A FOR XML ROOT('A'),ELEMENTS
  用变量接收保存该XML
  在script task里,用字节流的方式把XML写到文件(写的路径也可以用变量传递)
  写入文件时,默认会加上<ROOT>节点,可以用字符串处理的repace方法将其替换为空串

3.不使用 SSIS,直接通过 SQL也可以输出到文件
      -- XP_CMDSHELL 默认情况处于安全考虑,该功能是关闭的,需要用sp_configure设置为开启,用完之后再设置为关闭
  EXEC XP_CMDSHELL 'BCP "SELECT(SELECT TOP 2 * FROM [AdventureWorks2012].[Sales].[SalesOrderDetail]
    FOR XML RAW(''SalesOrderDetail''),ROOT(''SalesOrder''),ELEMENTS )AS XML_Order " QUERYOUT "D:\text.xml" -c -T'

输入XML解析数据到数据库
1.数据流中,用XML作为源
  首先需要确定XML是一个标准文件,能够被SSIS解析
  需要关于XML描述的XSD文件(可以根据已有的xml生成一个XSD文件)
  DES表的字段一般都可以用nvarchar接收; 一般默认xml输出的字符串类型的长度为unicode 255

  标签里带有“xmlns”命名空间的XML文件,可以自己写一个XSLT文件,用XSLT文件规定的格式,重新生成不带命名空间的XML文件
    http://www.cnblogs.com/chenxizhang/archive/2009/06/20/1507287.html

2.XML字符串
  比如,基于SOAP协议的WebService,用WSDL传递来的XML字符串
  如果XML字符串的标签里带有“xmlns”命名空间,可以考虑用SQL解析(先将XML保存到临时表,再用SQL的replace方法去掉xmlns,然后用SQL解析)

posted on 2017-04-20 18:52  LynHou  阅读(284)  评论(0编辑  收藏  举报