SSIS从Web服务任务解码Base64Binary中的XML

时间:2017-06-13 20:57:23

标签: xml web-services ssis

使用SSIS / Sql Server 2016,我设置了一个Web服务任务,从RESTApi服务下载一些数据。我已经能够设置WSDL并且看起来可以正常调用服务,因为我可以看到数据被返回到变量中。看起来它在base64binary中编码 - 例如:

<?xml version="1.0" encoding="utf-16"?>
<base64Binary>Q3VycmVuY3l.... </base64Binary>

where Q3VycmVuY3l.... is a long list of base64 characters.

我已经设法通过存储过程将数据插入到一个登陆表中,该登陆表只有一个类型为varchar(max)的列[BASE64]。现在我正在尝试处理数据并将base64数据转换为列和行。阅读了很多帖子后我尝试了以下内容(由于UTF-16使用nvarchar(max)):

--declare vars.

DECLARE @data nvarchar(max), @XmlData xml

--set the base64 encoded varchar.

SET @data = (SELECT [BASE64] FROM Landing.TickXML64)

--construct an xml var.

SET @XmlData = CAST(@data as xml)

--— base64 decode the @data.
SELECT CONVERT(nvarchar(max), 
@XmlData.value('(data)[1]', 'varbinary(max)'))

当我评估上述内容时,我得到以下内容:

select @data -- returns: 

<?xml version="1.0" encoding="utf-16"?>  <base64Binary>Q3VycmVuY3l......

select @xmldata -- returns:

<base64Binary>Q3VycmVuY3l.....

然而

SELECT CONVERT(nvarchar(max), 
@XmlData.value('(data)[1]', 'varbinary(max)'))

返回null

哪里出错了?是因为它周围还有标签吗?

如果有人有任何聪明的建议从SSIS中的Web服务中获取base64 xml数据并将其插入SQL表中,那么将非常感谢您的帮助。

0 个答案:

没有答案