从一个SQL数据库导出大量二进制数据,并将其导入到同一模式的另一个数据库中

时间:2013-02-14 22:25:18

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

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

我尝试将数据导出到excel并将其格式化为脚本。 (我之前和其他表一样。)事情是,excel不支持二进制数据。

我还尝试了SSMS中的“生成脚本”向导,但由于.sql文件远远超过18GB且我的电脑无法处理它,因此无效。

是否有其他SQL工具可以执行此操作?我用谷歌搜索了几个小时但无济于事。谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

为什么不试试'导出数据'功能?这应该有用。

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

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

但是,我建议使用第一种方法。

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

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

答案 1 :(得分:2)

我已经使用了SQL Workbench/J

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

或者您可以使用WbCopy直接复制数据而无需中间文件。

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

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

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

答案 2 :(得分:0)

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
)