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解析)