2011-03-02 13 views
4

我有一個簡單的數據流。 這個源代碼是一個小的平面文件,裏面大約有16k行。 目標是一個OLE DB目標,一個帶有3個部分唯一鍵的SQL 2008表。數據流經過一些簡單的轉換;行數,派生列,數據轉換等。BIDS - SSIS - 重定向行錯誤發送太多行

所有簡單和所有的工作正常。

我的問題是,在這個數據有2行是主鍵方面的重複,2個重複的行違反該鍵,所以總共4行。在OLE DB目標上,我將錯誤輸出設置爲重定向行,並將行發送到具有足夠列的錯誤表,以便識別錯誤的行。

問題是,即使有4個cuplrits,轉換仍然將1268行寫入錯誤表。

任何想法?

謝謝。

**

我想補充,如果我成功地取出2個重複行的整個文件導入.... 16875行。 毫無疑問,只有2行違反了鑰匙,但錯誤重定向影響1268

**

+0

你檢查出的1268行,即,做他們看起來是正確的或者也許別的東西使他們誤差鮑勃建議。 – ajdams 2011-03-02 21:58:50

回答

12

我找到了解決方案。

如果您在OLE目標中使用數據訪問模式「表或視圖」加載數據,而不是「表或視圖 - 快速加載」,則問題消失。

我能找到的唯一相關的評論是在MSDN上;

目標上的任何約束失敗都會導致由FastLoadMaxInsertCommitSize定義的整批行失敗。

因此,在我的情況下,似乎行大小爲1268,並且違反密鑰的2個重複行導致整個批次重定向到錯誤目標表。

0

你確定其他行都是由於違反PK錯誤?有幾個額外的列(ErrorCode,ErrorColumn)通過錯誤路徑可用。這可能表明你有不同的問題。

+0

謝謝你,我不知道你可以添加這些列。我加了他們並得到了價值;錯誤代碼 - -1071607685,它轉換爲dtsmsg。h到//MessageId:DTS_E_OLEDBDESTINATIONADAPTERSTATIC_UNAVAILABLE // // MessageText: // //沒有狀態可用。 // #define DTS_E_OLEDBDESTINATIONADAPTERSTATIC_UNAVAILABLE((HRESULT)0xC020907BL),錯誤列爲0 - 快速谷歌表明這意味着與行而不是列的錯誤...........所以沒有新的去那裏。 – 2011-03-02 21:04:01

+1

本文說-1071607685可能與FK約束相關:http://dwexperience.blogspot.com.au/2007/10/error-codes-1071607685.html – PeterX 2013-08-02 05:33:10

+0

繼「-1071607685」之後 - 這是一個唯一索引失敗爲了我們。 (另一個空行)。當我們關閉「重定向行」錯誤處理並獲取了包/步驟失敗時,我們獲得了更多信息。 – PeterX 2013-08-28 05:55:33

0

在SQL 2008中,您可以將失敗的行重定向到例如一個平面文件目的地。轉到目標OLEDB任務轉到錯誤輸出(選擇窗口中的所有字段)。用下面的組合框選擇重定向行並應用,然後確定。 接下來從OLEDB拖動一個先行約束(紅色箭頭)到一個新的平面文件任務並配置此任務(不要更改列的默認映射)。

現在您應該能夠更輕鬆地找到錯誤行。

埃裏克