【问题标题】:Export large amounts of binary data from one SQL database and import it into another database of the same schema从一个 SQL 数据库导出大量二进制数据,并将其导入另一个相同架构的数据库
【发布时间】:2013-01-30 20:49:03
【问题描述】:

我有一个数据库,其中包含一个包含 37,000 多条记录的图像表。每条记录都包含一个二进制数据形式的图像。我需要将所有这些 37,000 条记录放入另一个数据库中,该数据库包含相同的表和模式,该表和模式大约有 12,500 条记录。我需要使用 IF NOT EXISTS 方法将这些图像插入数据库,以确保完成后没有重复。

我尝试将数据导出到 excel 中并将其格式化为脚本。 (我以前用其他表做过。)问题是,excel不支持二进制数据。

我还尝试了 SSMS 中的“生成脚本”向导,但由于 .sql 文件超过 18GB 而我的电脑无法处理它,所以该向导不起作用。

是否有其他 SQL 工具可以做到这一点?我已经用谷歌搜索了几个小时,但无济于事。感谢您的帮助!

【问题讨论】:

  • 您使用的是哪个 DBMS?甲骨文? Postgres?
  • 他提到他在SSMS中使用了生成脚本向导,所以我想象它的Sql Server Management Studio

标签: sql-server image import export sql-server-2008


【解决方案1】:

为什么不试试“导出数据”功能?这应该可以。

右键单击源数据库,选择“任务”,然后选择“导出数据”。然后按照说明进行操作。您还可以保存设置并定期执行任务。

此外,bcp.exe 实用程序可以从一个数据库中读取数据并插入到另一个数据库中。

不过,我建议使用第一种方法。

更新:为了避免重复,您必须能够比较图像。不幸的是,您无法直接比较图像。但是您可以将它们投射到varbinary(max) 进行比较。

所以这是我的建议:
1.将表复制到新数据库中,名称为tmp_images
2. 使用merge 命令只插入新图像。

【讨论】:

  • bcp 是否支持二进制数据?
【解决方案2】:

我为此使用了SQL Workbench/J。

您可以通过文本文件使用WbExport 和WbImport(二进制数据将作为单独的文件写入,文本文件包含文件名)。

也可以使用WbCopy直接复制数据,无需中间文件。

要实现您的“如果不存在”方法,您可以使用更新/插入模式,尽管这会改变现有行。

我不认为有“仅在不存在时插入模式”,但您应该能够通过定义唯一索引并忽略错误来实现这一点(虽然这不会很快,但应该对那少量的行没问题)。

如果“存在”检查比较复杂,可以将数据复制到目标数据库的临时表中,然后使用 SQL 将其合并到真实表中。

【讨论】:

    【解决方案3】:
    INSERT INTO DB1.dbo.table_name
    SELECT  * FROM DB2.dbo.table_name
    WHERE column_name NOT IN
    (   
      SELECT column_name FROM DB1.dbo.table_name
    )
    

    【讨论】:

    • 你不得不提到那两台服务器应该是“链接服务器”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    相关资源
    最近更新 更多