中途通过SSIS项目特定表字段从改为nvarchar(30)
SSIS掌握OLEDB连接
然而,在运行SSIS包时,一个错误,说明cannot convert from unicode to non-unicode
出现错误的列类型。 我想直接从数据库源传输数据到目的地。
这两个连接都使用相同的数据库模式,因此不应该进行转换。
当检查外部列数据类型时,它显示D_STR
,这不再是这种情况。
我试图删除源和目的地,希望它会清理任何类型的缓存数据,但它没有奏效。
任何想法?
中途通过SSIS项目特定表字段从改为nvarchar(30)
SSIS掌握OLEDB连接
然而,在运行SSIS包时,一个错误,说明cannot convert from unicode to non-unicode
出现错误的列类型。 我想直接从数据库源传输数据到目的地。
这两个连接都使用相同的数据库模式,因此不应该进行转换。
当检查外部列数据类型时,它显示D_STR
,这不再是这种情况。
我试图删除源和目的地,希望它会清理任何类型的缓存数据,但它没有奏效。
任何想法?
听起来像我的数据流任务中的元数据缓存,需要刷新,以反映新的类型。
打开源代码,转到列,取消选中列,然后选中列。点击确定。元数据现在应刷新。
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
不知道你的包是如何工作的,我不能更具体但希望这会让你走。
我没有转换数据。该包是一个简单的“从表A转移到表B”,两个表上的列完全相同。发生了什么事情是,在某个时间点,两个表都改变了这个特定的列,但SSIS似乎没有注意到它 – cfrag
就是这样。我无法找到重置流中缓存的元数据的方法,但这样做的确有用。尽管如此,必须这样做是相当糟糕的,因为必须重新创建目标中的映射:S – cfrag
将每列视为数据流经的管道。在设计时,你告诉ssis你需要一个能够让30个字节流过的管道。然后,在运行时,您尝试通过30字节管道填充60个字节。通过取消选中列,然后重新检查,您强制ssis查看数据并用60字节管替换30。 – brian
我了解元数据的需求。我不明白的是缺少“刷新列元数据”按钮来强制“调整大小”。相反,人们必须重做整个管道。 – cfrag