我正在尝试使用SMO Transfer Class为数据库中的所有表编写脚本。我正在尝试创建批量的INSERT语句。这里似乎忽略了ScriptingOptions属性BatchSize,因为我的最终脚本在每个INSERT语句后都包含批处理分隔符“GO”。以下是我正在使用的代码段:
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 :(得分:0)
SqlBulkCopy类还有BatchSize和BulkCopyTimeout。我的猜测是,由于您输出的是纯文本而不是运行TransferData(),因此脚本编写者正在做自己的事情。在Transfer对象上运行TransferData()时,使用SMMS中的Activity Monitor监视进度,可以看到它正在执行INSERT BULK而不是许多小插入。