2008-09-09 132 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

此問題將主要歸因於文件末尾的空行,將其刪除並運行作業。