【发布时间】:2010-10-26 21:16:43
【问题描述】:
我有两个具有相同架构的数据库。我需要将所有表的内容从一个数据库复制到另一个数据库。做这个的最好方式是什么?大约有200张桌子。我有 ssms。
【问题讨论】:
-
SQL 检查器套件。在包含 900 多个表的数据库中使用它,效果非常好!
标签: sql sql-server sql-server-2008 ssms
我有两个具有相同架构的数据库。我需要将所有表的内容从一个数据库复制到另一个数据库。做这个的最好方式是什么?大约有200张桌子。我有 ssms。
【问题讨论】:
标签: sql sql-server sql-server-2008 ssms
如果您不关心第二个数据库中的数据(您不是在寻找合并),您可以备份您的数据库,然后在另一个数据库上恢复它。
如果您愿意,我可以发布屏幕截图来演示。
~~~~~~~~新增截图~~~~~~~~~~~~~~
打开管理工作室并连接,然后从任务菜单进入备份数据库:
然后单击确定按钮备份数据库(注意,选择不同的备份目录,例如 C:\ 可能不是一个坏主意,以便稍后尝试恢复它时它不是“正在使用”):
为您要粘贴的第二个数据库选择恢复:
从列表中选择第一个数据库,或浏览到要备份的文件:
在对现有数据执行还原时,可能需要选中选项选项卡上的此复选框:
点击确定,它应该可以工作了。
【讨论】:
您可以在 SSMS 中使用导出向导。右键单击源数据库,选择任务/导出数据并按照步骤操作。 200 张桌子有点乏味,但它是免费的。
【讨论】:
如果不花费 $,您可以使用 SELECT ... INTO ... 语法——前提是目标数据库中不存在 INTO 子句中指定的表:
SELECT *
INTO new_db.dbo.table
FROM old_db.dbo.table
但这不会迁移约束、触发器、作业、登录名、角色等。如果数据库位于不同的主机上,您可以使用Linked Server instance 连接它们并使用四个名称表示法来引用远程实例。
至于处理约 200 个表,您需要使用动态 SQL 来创建语句,因为您无法在动态 SQL 中将表名作为变量提供。表格列表可以来自SYS.TABLES 或INFORMATION_SCHEMA.TABLES
【讨论】:
让自己成为 Red-Gate SQL Data Compare - 工作的最佳工具,放下手。
更新:如果你不能或不想花任何钱,而是想花很多时间,你当然可以为每张桌子做这样的事情:
INSERT INTO TargetDatabase.dbo.YourTable1(list of fields)
SELECT (list of fields) FROM SourceDatabase.dbo.YourTable1
然后对其他 199 个表也重复此操作。
【讨论】:
我使用 RedGate 的数据比较,它在尝试解决数据问题时非常有用。
【讨论】: