2

我有超过 3 000 000 行的表。我尝试使用 SQL Server Management Studio 功能手动将数据导出Export data到 Excel,但遇到了几个问题:

  • 创建 .txt 文件时手动复制和粘贴数据(这是多次,因为如果您从 SQL Server Management Studio 复制所有行,则会引发内存不足错误)我无法使用任何文本编辑器打开它并复制行;

  • Export datato Excel 不起作用,因为 Excel 不支持这么多行

最后,Export data我创建了一个.sql文件的功能,但它是 1.5 GB,我无法再次在 SQL Server Management Studio 中打开它。

有没有办法用Import data功能导入它,或者其他更聪明的方法来备份我的表信息,然后在需要时再次导入它?

提前致谢。

4

2 回答 2

3

我不太确定我是否理解您的要求(我不知道您是否需要将数据导出到 excel 或者您是否想要进行某种备份)。

为了从单个表中导出数据,您可以使用批量复制工具,它允许您从单个表中导出数据并将其导出/导入到文件中。您还可以使用自定义查询来导出数据。

重要的是,这不会生成 Excel 文件,而是另一种格式。您可以使用它来将数据从一个数据库移动到另一个数据库(在这两种情况下都必须是 MS SQL)。

示例: 创建格式文件:

Bcp [TABLE_TO_EXPORT] 格式 "[EXPORT_FILE]" -n -f "[ FORMAT_FILE]" -S [SERVER] -E -T -a 65535

从表中导出所有数据:

bcp [TABLE_TO_EXPORT] out "[EXPORT_FILE]" -f "[FORMAT_FILE]" -S [SERVER] -E -T -a 65535

导入之前导出的数据:

bcp [TABLE_TO_EXPORT] in [EXPORT_FILE]" -f "[FORMAT_FILE] " -S [SERVER] -E -T -a 65535

我将 hte 导出/导入操作的输出重定向到日志文件(通过在命令末尾附加“> mylogfile.log”广告) - 如果您要导出大量数据,这会有所帮助。

于 2012-07-06T06:36:41.180 回答
0

这是一种不使用 bcp 的方法:

  1. 在文件中导出架构和数据

    • 使用 ssms 向导数据库 >> 任务 >> 生成脚本... >> 选择表 >> 选择数据库模型和模式
    • 保存 SQL 文件(可能很大)
    • 传输另一台服务器上的 SQL 文件
  2. 将数据拆分为多个文件

    • 使用诸如 textfilesplitter 之类的程序将文件拆分为较小的文件并拆分为 10 000 行的文件(因此每个文件都不会太大)
    • 将所有文件放在同一个文件夹中,别无其他
  3. 在第二个服务器中导入数据

    • 在同一文件夹中创建一个 .bat 文件,命名为 execFiles.bat
    • 您可能需要检查表模式以禁用第一个文件中的标识,您可以在导入完成后添加它。
    • 这将针对服务器和数据库执行文件夹中的所有文件,使用 -f 定义应使用 Unicode 文本编码来处理重音符号:

      for %%G in (*.sql) do sqlcmd /S ServerName /d DatabaseName -E -i"%%G" -f 65001 pause

于 2017-11-15T08:37:46.033 回答