大家早上好,现在已经2天试图弄清楚如何解决这个问题,仍然没有答案。也许你能帮帮我。事情就是这样。我创建了一个 SSIS 包来从另一个数据库服务器导入数据;这是两台服务器的规格:我正在使用 Sql Server Data Tools 2012
来源:SQL Server 2008 r2 连接类型:OLE DB
目标:SQL Server 2012 连接类型:OLE DB
该包是一个导入和导出包,有 2 个任务,一个“数据流任务”和一个“执行 SQL 任务”。源是一个 SQL 命令,从几个连接中进行简单选择,没什么特别的。Destination 是目标服务器中的表。当然,我们之间有一个数据转换任务。在我们向选择中添加一个类型为 varchar(50) 的新列之前,该程序包运行良好。我用相同的方式修改了目标表,只有我使用了 NVARCHAR(50),并将数据转换添加为长度为 50 的 UNICODE 字符串 [DT_WSTR]。
完成此操作后,我收到错误消息:
错误:[包] 处的 0xC020901C,源 - 查询 [127]:源 - Query.Outputs[OLE DB 源输出].Columns[COL] 在源 - Query.Outputs[OLE DB 源输出] 上存在错误。返回的列状态为:“由于可能丢失数据,无法转换该值。”。
我试图将目标列的大小从 50 增加到 100,但仍然发生相同的错误。奇怪的是,当我在源查询中用 NULL 替换 Col 时,我让包完美运行。
有什么建议么?
好的,我在搜索和测试了很多东西后找到了解决方案。问题出在元数据(源查询和数据转换之间的连接)中,字段的长度不再与源查询中的长度匹配,这对我来说很奇怪,因为我认为元数据会是保存和编译或关闭解决方案并重新打开它时自动刷新。
我不知道为什么会发生这种情况,但现在包再次完美运行。
这不是一个解决方案,而是一个奇怪的解决方法。
我遇到了完全相同的问题,只有一列包含 Char(6) 类型的 6 个字符的字母数字代码。我的源是一个 sql 脚本,我的目标是一个 nvarchar,而我在两者之间有一个转换器。
Nulls,在那里可以,所以我将导入限制为具有值的单个记录。我发现我可以使用 LEFT([column], 1) 运行导入,但不能使用代码中的任何其他字符。例如 SUBSTRING([column], 2, 1) 仍然出错。
在这一点上,我放弃了,并投入了工作。我能够将列和关联的键导入另一个表并运行 UPDATE 脚本将数据复制到目标表。
很奇怪。