2

我正在尝试使用 SMO 传输类为数据库中的所有表编写数据脚本。我正在尝试创建一批 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
...
4

1 回答 1

0

SqlBulkCopy 类也有 BatchSize 和 BulkCopyTimeout。我的猜测是,由于您输出的是纯文本而不是运行 TransferData(),因此脚本编写者正在做自己的事情。在 Transfer 对象上运行 TransferData() 时,使用 SMMS 中的 Activity Monitor 监视进度,您可以看到它正在执行 INSERT BULK 而不是许多小的插入。

于 2013-07-30T18:07:47.297 回答