如何解决SSIS中的多步OLE DB操作错误?
时间:2020-03-05 18:49:58 来源:igfitidea点击:
我试图制作一个DTS包以在同一服务器上的两个数据库之间传输数据,但出现以下错误。 iv读到,当我们在不同数据库类型之间进行传输时,可能会发生"多步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.
解决方案
回答
我们可以使用" SELECT * FROM INFORMATION_SCHEMA.COLUMNS",但是我怀疑我们是从源数据库的脚本创建目标数据库的,因此它们的列很可能是相同的。
一些比较可能会带来一些好处。
这些错误有时是由于试图将太多数据插入varchar列而引起的。
回答
该查询应确定潜在的列...
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
回答
当我将数据从旧数据库传输到新数据库时,我遇到了类似的问题,上面出现了错误。然后我运行以下脚本
`SELECT * FROM [source] .INFORMATION_SCHEMA.COLUMNS src INNER JOIN [dest] .INFORMATION_SCHEMA.COLUMNS dst on dst.COLUMN_NAME = src.COLUMN_NAME dst.CHARACTER_MAXIMUM_LENGTH <src.CHARACTER_MAXIMUM_LENGTH
并发现我的列在字符大小等方面略有不同。
然后,我尝试将表更改为无效的新表结构。然后,我将数据从旧数据库传输到Excel中,并将数据从excel导入到可以工作100%的新数据库中。