Миграция с SQL DMO на SQL SMO (SQL Server 2012)
Я перевожу логику SQL DMO в логику SQL SMO, и я не уверен, как добиться такой же функциональности для некоторых атрибутов. Это DMO:
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
Это СМО пока что
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? Благодарю.
1 ответ
Несмотря на то, что MSDN говорит, Transfer
на самом деле не является эквивалентом BulkCopy2
; он предназначен для создания сценариев / копирования целых баз данных, тогда как BulkCopy2
только для массового копирования данных. Настройки не соответствуют вообще - в частности, Transfer.TargetDatabaseFilePath
предполагается, что местоположение файла базы данных, тогда как BulkCopy2.DataFilePath
расположение файла, в который помещаются импортированные / экспортированные данные. Некоторые сценарии массового копирования обрабатываются Transfer
, но большинство нет.
Если вы на самом деле не копируете всю базу данных, у вас есть несколько вариантов, ни один из которых не использует SMO (у которого нет класса для массового копирования как такового):
- Прямой вызов оператора BULK INSERT, который, вероятно,
BulkCopy2
делает в фоновом режиме (но я не проверял это); - Использование класса SqlBulkCopy, который потребует некоторого дополнительного кода (но который также предлагает гораздо большую гибкость, поскольку импортируемые данные могут поступать из любого источника);
- Сборка командной строки и запуск bcp.
Из этих, BULK INSERT
самый простой.