2016-07-07 84 views
0

我有一個表有很多整數類型的列,它用於從其他源表中插入所有相應的列是varchar的數據。如何定位錯誤數據插入數據時沒有SSIS

INSERT INTO mytable(intCol1, intCol2, ...intColN, [OtherCols]) 
SELECT CAST(col1 AS int), CAST(col2 AS int),.... FROM SourceTable 

最後的劇本,如「沒有東西轉換爲int」或「運算通過將轉換成int溢出錯誤」引發的數據級又令人費解的錯誤。但是,由於我有這麼多的int列和很多行數據,所以不太可能找到錯誤的來源,至少在列級別。

更重要的是,由於某些原因,不允許使用SSIS來重定向和查找我的情況的錯誤數據,只有SQL腳本級別可用。有沒有解決方法?

+0

除非您驗證,否則您無法找到錯誤的數據。由於您僅限於使用SSIS,因此您需要在插入之前在表上編寫觸發器,並具有檢查每列的邏輯,並且如果它不符合表數據類型將其推入錯誤表中。 #只是一個想法。 – knkarthick24

+1

你正在使用什麼版本的SQL Server? –

+0

您還可以使用模式視圖編寫一些動態sql來獲取列名和數據類型,然後查詢源表以發現問題。或者使用這些視圖來幫助您在where子句中構造一個long語句,以在插入之前測試數據類型。然後插入通過where命令匹配的記錄以找到不成功的記錄...或者使用MERGE,如果不匹配,則插入失敗表....... ISNUMERIC()ISDATE()LEN() DATALENGHT()等..... – Matt

回答

0

可以在SSIS中重定向來自OLE DB目標的錯誤行。 不要在dest中使用快速加載,將錯誤輸出配置爲'重定向行'而不是'failure component',使用紅色箭頭/數據流路徑將壞行發送到派生列任務,將數據查看器放在紅色數據流路徑。

這應該讓你找到導致問題的特定行。