簡體   English   中英

批量SQL插入故障排除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM