使用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表中,那么将非常感谢您的帮助。