2

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

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

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

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

4

3 回答 3

2

您为什么不尝试“导出数据”功能?这应该有效。

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

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

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

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

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

于 2013-02-14T22:39:01.043 回答
2

为此,我使用了SQL Workbench/J

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

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

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

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

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

于 2013-02-14T22:49:16.900 回答
1
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
)
于 2013-02-20T18:56:54.677 回答