2013-07-16 3 views
2

Я пытаюсь выполнить запись данных для всех таблиц в базе данных с помощью SMO Transfer Class. Я пытаюсь создать партии инструкций INSERT. Свойство ScriptingOptions BatchSize, похоже, здесь игнорируется, так как мой окончательный скрипт содержит пакетный разделитель «GO» после каждого оператора INSERT. Ниже фрагмент кода я использую:ScriptingOptions.BatchSize не имеет эффекта

so.BatchSize = 500; 
so.ScriptBatchTerminator = true; 
so.NoCommandTerminator = false; 
so.ScriptData = true; 
so.SchemaQualify = true; 
//and few other options all set to false 

... 

Transfer tData = new Transfer(sourceDb); 
tData.Options = so; 

... 

tData.CopySchema = true; 
tData.CopyData = true; 

... 

tData.EnumScriptTransfer(); 

Выходной скрипт выглядит так:

INSERT INTO... 
GO 
INSERT INTO... 
GO 
INSERT INTO... 
GO 
... 

но ожидаемый выход

INSERT INTO... 
INSERT INTO... 
INSERT INTO... 
//497 more INSERTS 
GO 
... 
+0

Transfer.BatchSize недоступен, так как я использую сборки 2008 года. –

+1

Я переключился на сборку 2012 года и попытался использовать Transfer.BatchSize. Проблема здесь заключается в том, что он всегда вставляет GO после 100 строк, независимо от значения, указанного для этого свойства. –

ответ

0

Класс SqlBulkCopy также имеет BATCHSIZE и BulkCopyTimeout , Я предполагаю, что, поскольку вы выводите на обычный текст вместо запуска TransferData(), скриптер делает это самостоятельно. При запуске TransferData() на объекте Transfer, отслеживая ход работы с Activity Monitor в SMMS, вы можете видеть, что он выполняет INSERT BULK вместо многих небольших вставок.

Смежные вопросы