我有一个数据库,其图像表包含超过37,000条记录。每条记录都包含二进制数据形式的图像。我需要将所有这37,000条记录放入另一个包含相同表和模式的数据库中,该数据库包含大约12,500条记录。我需要使用IF NOT EXISTS方法将这些图像插入到数据库中,以确保在完成后没有重复。
我尝试将数据导出到excel并将其格式化为脚本。 (我之前和其他表一样。)事情是,excel不支持二进制数据。
我还尝试了SSMS中的“生成脚本”向导,但由于.sql文件远远超过18GB且我的电脑无法处理它,因此无效。
是否有其他SQL工具可以执行此操作?我用谷歌搜索了几个小时但无济于事。谢谢你的帮助!
答案 0 :(得分:2)
为什么不试试'导出数据'功能?这应该有用。
右键单击源数据库,选择“任务”,然后选择“导出数据”。然后按照说明操作。您还可以保存设置并定期执行任务。
此外,bcp.exe实用程序可以从一个数据库读取数据并插入另一个数据库。
但是,我建议使用第一种方法。
更新:为了避免重复,您必须能够比较图像。不幸的是,您无法直接比较图像。但你可以将它们转换为varbinary(max)
进行比较。
所以这是我的建议:
1.将表格复制到名为tmp_images
的新数据库中
2.使用merge
命令仅插入新图像。
答案 1 :(得分:2)
我已经使用了SQL Workbench/J。
您可以通过文本文件使用WbExport和WbImport(二进制数据将作为单独的文件写入,文本文件包含文件名)。
或者您可以使用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
)