SqlBulkCopy因字符串轉換問題而失敗

.net sql sqlbulkcopy

我有一個視圖,它生成了許多列,我想將它們批量加載到另一個具有相同名稱列的表中。

當我循環遍歷SqlDataReader並且每次使用SqlCommand使用SqlParameters進行插入時,此過程運行正常。顯然,對於許多100000行,這太慢了。

我切換到使用SqlBulkCopy,因為它似乎可以工作,因為視圖列名和目標數據庫表列名和類型匹配(因為上面的過程工作!)。

但是,在第一個記錄上,它失敗並出現InvalidOperationException,指出“String類型的給定值無法轉換為指定目標列的smalldatetime類型”。第一行中只有一個日期列,其值為NULL。

視圖僅返回列的子集,但它不是可以為空的。

任何幫助,將不勝感激。

一般承認的答案

sqlbulkcopy不會在具有相同名稱的列之間自動映射。它假定您的select將按照它在目標表中看到的順序返回列。

因此,如果目標表中有7列,並且視圖返回5,則會嘗試將這5列放在目標表的前5列中。

SqlBulkCopy類可以採用列映射的集合。這應該夠了吧


熱門答案

嘗試將SET DATEFORMAT設置為正確的格式(ymd,dmy,mdy,...)以進行連接並重試。如果您有本地化格式的日期而不是與語言環境無關的格式,則通常會發生此錯誤。

至於在一個插入中執行所有操作,建議不要這樣做,因為這被認為是一個長時間運行的事務而不是批量插入操作。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow