2014-12-10 13 views
0

SQL DMO 논리를 SQL SMO 논리로 마이그레이션 중이며 몇 가지 특성에서 동일한 기능을 수행하는 방법을 모르겠습니다. 이것은 DMO입니다 :SQL DMO에서 SQL SMO로 마이그레이션 (SQL Server 2012)

oBCP = New SQLDMO.BulkCopy2 
    With oBCP 
     .ImportRowsPerBatch = ImportRowsPerBatch     
     .DataFilePath = Path.Combine(gtSysTempDir, "file.dat")  
     .LogFilePath = Path.Combine(gtSysTempDir, "file.log")  
     .ErrorFilePath = Path.Combine(gtSysTempDir, "file.err")  
     .MaximumErrorsBeforeAbort = 1     
     .DataFileType = SQLDMO.SQLDMO_DATAFILE_TYPE.SQLDMODataFile_TabDelimitedChar 
    End With 

이 지금까지 SMO입니다 :

trans = New Transfer 
    With trans 
     .ImportRowsPerBatch = ImportRowsPerBatch     
     .TargetDatabaseFilePath = Path.Combine(gtSysTempDir, "file.dat")  
     .TargetLogFilePath = Path.Combine(gtSysTempDir, "file.log")  
     '.ErrorFilePath = Path.Combine(gtSysTempDir, "file.err")  
     .MaximumErrorsBeforeAbort = 1     
     .DataFileType = SQLDMO.SQLDMO_DATAFILE_TYPE.SQLDMODataFile_TabDelimitedChar 
    End With 

무엇입니까 등가물, 그들은 존재하는 경우, ImportRowsPerBatch (BatchSize에서?), ErrorFilePath, MaxErrorsBeforeAbort 및 DataFileType의? 감사합니다. .

답변

0

what the MSDN says에도 불구하고 Transfer은 실제로 BulkCopy2과 동일하지 않습니다. BulkCopy2은 데이터를 대량 복사하는 데 사용되는 반면 전체 데이터베이스를 스크립팅/복사하기위한 것입니다. 설정이 전혀 일치하지 않습니다. 특히 Transfer.TargetDatabaseFilePath은 데이터베이스 파일의 위치로, BulkCopy2.DataFilePath은 가져 오거나 내 보낸 데이터가있는 파일의 위치입니다. 일부 대량 복사 시나리오는 Transfer으로 처리되지만 대부분은 그렇지 않습니다. 실제로 전체 데이터베이스를 복사하지 않는 경우

, 당신은 (예 : 대량 복사에 대한 클래스가 없습니다) SMO를 사용 어느 것도 여러 가지 대안이 있습니다

  • 직접 BULK INSERT 문을 호출을하는 아마도 BulkCopy2이 백그라운드에서 수행하는 것일 수 있습니다 (그러나 이것을 확인하지는 못했습니다).
  • SqlBulkCopy 클래스를 사용하면 몇 가지 추가 코드가 필요합니다.하지만 가져올 데이터가 모든 소스에서 제공 될 수 있으므로 유연성이 훨씬 뛰어납니다.
  • 명령 줄을 작성하고 bcp을 호출합니다.

이 중 BULK INSERT이 가장 간단합니다.