2012-07-19 70 views
3

我正在處理非常大的分隔文件。這些文件已經過預處理,以確保字段和行分隔符有效。偶爾會處理一行失敗的TSQL約束(通常是數據類型問題)。在這種情況下,「修復」輸入數據不是一種選擇。TSQL BULK INSERT行錯誤導致C#異常

我們使用MAXERRORS來設置可接受數量的輸入錯誤,並使用ERRORFILE來記錄失敗的行。

批量插入在SSMS中完成,並且每個失敗行的消息窗口中記錄了嚴重級別爲16的錯誤消息。試圖通過C#SqlCommand類嘗試執行此代碼會導致在生成第一個嚴重級別爲16的錯誤消息時引發異常,從而導致批處理失敗。

有沒有辦法完成操作,並通過C#和類似SqlCommand的東西忽略SQL錯誤消息?

示例命令:

BULK INSERT #some-table FROM 'filename' 
WITH(FIELDTERMINATOR ='\0',ROWTERMINATOR ='\n',FIRSTROW = 2, MAXERRORS = 100, ERRORFILE = 'some-file') 
+1

您是否考慮過使用SSIS? – HLGEM 2012-07-19 18:54:41

+0

@HLGEM我們正在使用SQL 2008 Express。我的理解是,該級別的SSIS缺乏我需要的功能。 – jhappoldt 2012-07-19 18:56:04

回答

0

既然你應該能夠在.NET中的TryParse捕捉任何轉換誤差.NET支持所有的數據類型爲SQL。在日期中,您還需要在SQL數據範圍內進行測試。在文本上需要測試長度。我在一些非常大的插入物上做了這個,我解析了一些CSV。 TryParse非常快。比Try Catch更好,因爲它沒有投擲和錯誤的開銷。

爲什麼不在.NET C#中插入。有一個批量複製類。我在解析時使用TVP異步插入,並一次執行10,000次。