[英]Bulk SQL Insert Troubleshooting
我正在編寫一個數據轉換代碼,它將一系列日期從一個數據庫移動到另一個數據庫。 當我這樣做時,我得到一個SQLTypeException,說值超出范圍。 我知道這意味着我在某個地方輸入了錯誤的數據。
那么我的問題是:由於大約有5,000個條目,代碼中是否有一種簡單的方法來查找錯誤值所在的位置? 我已經打開了DataSet Visualizer,但是有沒有一種方法可以對它進行排序或篩選數據呢?
您可以嘗試使用ERRORFILE ='file_name'
指定用於收集有格式錯誤且不能轉換為OLE DB行集的行的文件。 這些行將從數據文件“按原樣”復制到此錯誤文件中。
語法(在查詢末尾找到ERRORFILE)
BULK INSERT
[ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]
FROM 'data_file'
[ WITH
(
[ [ , ] BATCHSIZE = batch_size ]
[ [ , ] CHECK_CONSTRAINTS ]
[ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
[ [ , ] DATAFILETYPE =
{ 'char' | 'native'| 'widechar' | 'widenative' } ]
[ [ , ] FIELDTERMINATOR = 'field_terminator' ]
[ [ , ] FIRSTROW = first_row ]
[ [ , ] FIRE_TRIGGERS ]
[ [ , ] FORMATFILE = 'format_file_path' ]
[ [ , ] KEEPIDENTITY ]
[ [ , ] KEEPNULLS ]
[ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]
[ [ , ] LASTROW = last_row ]
[ [ , ] MAXERRORS = max_errors ]
[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]
[ [ , ] ROWS_PER_BATCH = rows_per_batch ]
[ [ , ] ROWTERMINATOR = 'row_terminator' ]
[ [ , ] TABLOCK ]
[ [ , ] ERRORFILE = 'file_name' ]
)]
5000個條目不是一個接一個地做的太多。 這樣,您可以輕松發現有問題的條目。
您也可以使用BATCHSIZE = 100來縮小提交的批次大小:)
BATCHSIZE = batch_size指定批處理中的行數。 每一批都作為一個事務復制到服務器。 如果失敗,SQL Server將為每個批處理提交或回滾事務。 默認情況下,指定數據文件中的所有數據都是一批。 有關性能注意事項的信息,請參閱本主題后面的“備注”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.