旋风

Communication comes from our hears and heads! my msn:youpeizun@hotmail.com


导航

SSIS 文件迁移任务中遇到varchar与nvarchar的问题总结

Posted on 2008-06-30 14:31  xuanfeng  阅读(1783)  评论(2编辑  收藏  举报
       文件迁称任务:SSIS包的文件任务需要把由外部程序所指定的文件迁移到其它地方,并且需要重命名该文件。

在程序中的处理:在执行SQL任务中我定义一个varchar类型的变最,所然把外部赋值的路径值赋给它,经过文件重命名后,再传给包的另一个变量以作为文件任务中的目标路径;

这个步骤成功了。

但是,在文件迁移任务中就发生了异常:

错误提示信息:[文件系统任务] 错误: 出现错误,错误消息如下:“路径中具有非法字符。”。

为我确认重名命后的路径变量的值,就把它插入到MS 数据库(中文环境)中,但查看了变量的值后,没发现什么奇怪的事情,重命名后的路径完全合法,为了确认,我把它直接赋值给文件任务中是目标路径,结果执行成功了,但这一下我开始昏了,为什么给变量就不行呢?

经过一番猜想与测试,确认问题出现在由于路径中有中文的原因。于是我在变量的类型上下功夫,结果把执行SQL任务中我定义路径变量varchar类型改为nvarchar后,结果运行成功啦!皆大欢喜!

后来才查到其中的原由:

varcharSQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段 的类型为nvarchar,则会占用两个字节. 正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操 作系统并且对中文字体的支持不全面时, SQL Server存储中文字符为varchar就会出现乱码(显示为??).而且正常情况下,主机都会支持中文的环境,所以如果使用varchar来存储数 据,在开发阶段是发现不了的.多数情况下,在布署的时候也不会有问题.但是!如果布署的主机是英文操作系统,并且不支持中文环境,那问 题就出来了.所有的varchar字段在存储中文的时候都会变成乱码(显示为??

SSIS在变量类型的定义上很敏感,许多时候发现的异常不易发现,就像使用Biztalk一样,定义变量时一定要慎重!

专门做了一个包跟大家分亨这次问题解决的实验,有兴趣的朋友可以下载下来看看
   
实验包下载
说明:
要运行本包需要要本地数据库,新建一个包含test字段的表test表的test数据库
和在D盘新建一个SSIS包路径测试.txt的文件!