2011-10-26 77 views
5

中途通过SSIS项目特定表字段从​​改为nvarchar(30)SSIS掌握OLEDB连接

然而,在运行SSIS包时,一个错误,说明cannot convert from unicode to non-unicode出现错误的列类型。 我想直接从数据库源传输数据到目的地。

这两个连接都使用相同的数据库模式,因此不应该进行转换。

当检查外部列数据类型时,它显示D_STR,这不再是这种情况。

我试图删除源和目的地,希望它会清理任何类型的缓存数据,但它没有奏效。

任何想法?

回答

16

听起来像我的数据流任务中的元数据缓存,需要刷新,以反映新的类型。

打开源代码,转到列,取消选中列,然后选中列。点击确定。元数据现在应刷新。

+0

就是这样。我无法找到重置流中缓存的元数据的方法,但这样做的确有用。尽管如此,必须这样做是相当糟糕的,因为必须重新创建目标中的映射:S – cfrag

+1

将每列视为数据流经的管道。在设计时,你告诉ssis你需要一个能够让30个字节流过的管道。然后,在运行时,您尝试通过30字节管道填充60个字节。通过取消选中列,然后重新检查,您强制ssis查看数据并用60字节管替换30。 – brian

+3

我了解元数据的需求。我不明白的是缺少“刷新列元数据”按钮来强制“调整大小”。相反,人们必须重做整个管道。 – cfrag

1

nvarchar和nchar是unicode。相反,varchar和char是非Unicode的。

http://msdn.microsoft.com/en-us/library/ms187752.aspx

由于如果从一个数据类型的数据移动到另一个,你将不得不执行一些额外的转换(CAST或CONVERT)的结果。另一种选择是看你的适配器,使得焦炭将使用DT-STR的SSIS数据类型和nvarchar将使用SSIS数据类型DT-WSTR

http://msdn.microsoft.com/en-us/library/ms141036.aspx

不知道你的包是如何工作的,我不能更具体但希望这会让你走。

+0

我没有转换数据。该包是一个简单的“从表A转移到表B”,两个表上的列完全相同。发生了什么事情是,在某个时间点,两个表都改变了这个特定的列,但SSIS似乎没有注意到它 – cfrag