SSIS包验证错误:无法在unicode和非unicode字符串类型之间转换

浏览: 4695

尝试做一个简单的ETL数据提取,就从A库提取用户信息(Sql语句拼接)到B库,操作过程中遇到3个问题:

1、除从数据源里通过SQL语句取到的字段外,还需要加入一个自定义字段SampleDate字段,yyyyMMdd格式,但是以int类型存储到目标表中。值通过参数传递。

     定义了一个Int32类型的参数SampleDate,赋好值。

     开始的想法是在SQL命令里像传入查询参数那样,在SELECT 后加上”,? as SampleDate“,结果预览报错:”无法唯一推导”@P1“的参数类型;两种可能类型为”sql_variant“和"xml"。“ ,说明这种方法不可取。

     后来想想,这个属于新列,就用派生列试试,表达式取参数:@SampleDate,果然可行。

2、数据流任务都准备好,运行,报错如下:

   unicode和非unicode错误.png

    检查了下,目标表中这两个字段都是字符串类型啊,没明白什么错,百度了下,得到的结果是,数据源中的字段是varchar,而目标中对应的字段是nvarchar时就会报这个错;查了下我的表里字段类型,果然是,想不到SSIS这么严谨啊,平时我都没有注意到这两个字段的类型不一样。

    解决办法:

    派生列里,新建列,(作为新列添加),表达式取报错的字段,如下图所示:

派生列2.png

然后在映射里,将新的NUserName对应到目标列UserName,NCity列对应到目标列City。问题解决。


3、目标表选择组件”SQL Server 目标“ 运行时就会报错:

” SSIS 错误代码 DTS_E_OLEDBERROR。出现 OLE DB 错误。错误代码: 0x80040E14。

已获得 OLE DB 记录。源:“Microsoft SQL Server Native Client 11.0” Hresult: 0x80040E14 说明:“由于无法打开 SSIS 文件映射对象 'Global\DTSQLIMPORT              ',无法进行大容量加载。操作系统错误代码为 2(系统找不到指定的文件。)。请确保您是通过 Windows 安全性访问本地服务器的。”。“

   查看了组件”SQL Server 目标“的说明如下:

SQL目标.png

 测试了下面两种方法,都通过。

1、把SQL Server目标的连接管理器里的数据库链接 换成本地的,运行成功。

2、把SQL Server目标 换成组件”OLE DB目标“,运行成功。

推荐 0
本文由 BILizzy 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册