2008-09-09 129 views
21

我正在尝试使DTS包在同一台服务器上的两个数据库之间传输数据,并且出现以下错误。我读过,当您在不同的数据库类型之间进行传输并且存在精度损失时,可能会发生多步OLE DB操作生成的错误,但这里不是这种情况。我如何检查列元数据?如何修复SSIS中的多步​​OLE DB操作错误?

Error: 0xC0202009 at Data Flow Task, piTech [183]: An OLE DB error has occurred. Error code: 0x80040E21. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E21 Description: "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".

Error: 0xC0202025 at Data Flow Task, piTech [183]: Cannot create an OLE DB accessor. Verify that the column metadata is valid.

Error: 0xC004701A at Data Flow Task, DTS.Pipeline: component "piTech" (183) failed the pre-execute phase and returned error code 0xC0202025.

回答

0

您可以使用SELECT * FROM INFORMATION_SCHEMA.COLUMNS但我怀疑你从源数据库的脚本创建的目标数据库所以它是非常有可能,他们列将是相同的。

一些比较可能会带来一些东西。

这些类型的错误有时来自尝试将太多数据插入到varchar列中。

3

该查询应确定潜在的问题列...

SELECT * 
FROM [source].INFORMATION_SCHEMA.COLUMNS src 
    INNER JOIN [dest].INFORMATION_SCHEMA.COLUMNS dst 
     ON dst.COLUMN_NAME = src.COLUMN_NAME 
WHERE dst.CHARACTER_MAXIMUM_LENGTH < src.CHARACTER_MAXIMUM_LENGTH 
0

我有一个类似的问题时,我是从一个旧的数据库将数据传输到新的数据库,我得到上述错误。然后,我跑到下面的脚本

SELECT * FROM [source].INFORMATION_SCHEMA.COLUMNS src INNER JOIN [dest].INFORMATION_SCHEMA.COLUMNS dst ON dst.COLUMN_NAME = src.COLUMN_NAME WHERE dst.CHARACTER_MAXIMUM_LENGTH < src.CHARACTER_MAXIMUM_LENGTH

,发现我的专栏,其中在字符大小等 方面略有不同我然后试图更改表到新表的结构,没有工作。然后,我将数据从旧数据库转移到Excel中,并将数据从excel导入到工作了100%的新DB中。

34

看看字段的属性(类型,长度,默认值等),它们应该是相同的。

我有SQL Server 2008 R2的这个问题,因为字段的长度不相等。

+3

+1 - 这很好。我通过使用派生列将`memo`类型(从我的访问源数据库)转换为SSIS中的`DT_WSTR`类型来解决相同的错误。将我的字符串作为`DT_WSTR`类型在我的SQL 2008 R2数据库中将字符串存储为nvarchar时效果很好。 – 2011-10-08 15:35:53

+0

我的问题是类似的 - 从SQL 2012数据库复制到MS Access表。目标类型是Text,我没有意识到它有255个字符的限制。我将目标类型更改为备忘录以删除此限制,并且数据复制成功。 – 2017-03-16 14:09:32

7

当源表包含TEXT列并且目标是除TEXT列之外的任何其他目标时,此错误很常见。如果你以前没有遇到(或忘记!)它可以是一个真正的时间食者。

将文本列转换为字符串,并将截断时的错误条件设置为忽略。这通常会作为解决这个错误的方法。

-1

尝试执行插入操作时,也会发生此错误,并且字段编码不为null,并且尝试插入空值。

-1

我在将csv传输到mssql时出现此错误 我将列转换为DT_NTEXT,并将mssql上的某些列设置为nvarchar(255)。

将它们设置为nvarchar(max)解析它。

0

同时检查脚本是否没有批分隔命令(删除单行上的'GO'语句)。

0

'-2147217887' message 'IDispatch error #3105' source 'Microsoft OLE DB Service Components' description 'Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.'."

这就是我当时也面临着。问题来自于我将SQLOLEDB.1提供程序更改为SQLNCLI11 而没有提及连接字符串中的兼容性模式。 当我在连接字符串中设置此DataTypeCompatibility=80;时,我解决了问题。

1

此问题将主要归因于文件末尾的空行,将其删除并运行作业。