如何解决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%的新数据库中。