3

我希望在迁移项目中执行一系列查询。要生成的脚本由分析遗留数据库的工具生成,然后生成脚本以将每个旧实体映射到适当的新记录。这些脚本对于小型实体运行良好,但有些记录有数十万条记录,生成的脚本文件约为 80 MB。

运行这些脚本的最佳方式是什么?

提示中是否有一些处理较大脚本的 SQLCMD?

我还可以将脚本分解为更小的脚本,但我不想执行数百个脚本来执行迁移。

4

5 回答 5

2

如果可能,修改导出工具以导出 BULK INSERT 兼容文件。

除此之外,您可以编写一个程序,将插入语句解析为 BULK INSERT 将接受的内容。

于 2008-10-08T15:01:17.443 回答
1

BULK INSERT使用BCP传统(非XML)或XML. 它是否必须获得一个新的身份并在孩子身上使用它,而您无法摆脱使用,SET IDENTITY INSERT ON因为数据库设计已经发生了很大变化?如果是这样,我认为您最好使用 SSIS 或类似方法,并在分配身份后进行合并连接。您还可以使用 SSIS 或 BCP 将数据加载到 SQL 中的临时表中,然后使用常规 SQL(可能在 SQL 任务中的 SSIS 中)使用该OUTPUT INTO功能来捕获身份并在 children 中使用它们

于 2008-10-08T16:50:46.193 回答
0

我一直在从文件选项中查看“BULK INSERT”,但看不到文件格式的任何示例。文件可以混合行格式还是必须始终以 CSV 方式保持一致?我问的原因是我在各种父/子表中都涉及到身份,这就是当前使用每行插入的原因。

于 2008-10-08T15:38:35.700 回答
0

听起来这会INSERT为每一行生成一个,这真的会很慢。如果它们也都包含在事务中,那可能会有点慢(尽管行数听起来没有那么大,以至于几乎不可能进行事务 - 就像你持有数百万行一样插入事务)。

您最好查看 ETL(DTS、SSIS、BCP 或 BULK INSERT FROM 或其他工具)来迁移数据,而不是编写每个插入的脚本。

您可以分解脚本并分部分执行(特别是如果目前它使这成为一项大事务),只需使用 PowerShell 或类似工具自动执行各个脚本。

于 2008-10-08T15:02:53.340 回答
0

只需执行脚本。我们定期运行大小为 100 兆字节的备份/恢复脚本。只需要30秒左右。

如果在这段时间内不要阻止您的服务器很重要,那么您将不得不真正将它分开一点。

还可以查看 mysqldump 的 -tab 选项,使用 TO OUTFILE 输出数据,这更有效,加载速度更快。

于 2008-10-08T15:02:59.533 回答