将数据从一个数据库传输到另一个数据库

97

如何从一个数据库中获取数据并将其插入到另一个数据库表格中?我无法实现这个。请帮助我将数据从一个数据库传输到另一个数据库。


12
有很多种方法可以做到这一点。您的要求是什么?“我做不到这个。” 您尝试过什么?您看到了什么错误? - Jamie F
26
问题的结构表明作者完全迷失了方向。当然,您可以从这里开始评判他的问题。我只是写一篇答案。 - Andras Gyomrey
10个回答

149

有几种方法可以做到这一点,以下是两个选项:

选项1 - 右键单击要复制的数据库

  • 选择 '任务' > '生成脚本'

  • '选择特定数据库对象'

  • 勾选 '表'

  • 标记 '保存到新查询窗口'

  • 点击 '高级'

  • 将 '要脚本化的数据类型' 设置为 '架构和数据'

  • 下一步,下一步

现在您可以在新数据库上运行生成的查询。

选项2

  • 右键单击要复制的数据库

  • '任务' > '导出数据'

  • 下一步,下一步

  • 选择要将表复制到的数据库

  • 标记 '从一个或多个表或视图复制数据'

  • 选择要复制的表

  • 完成


4
在 SQL Server 2008 中复制每个表的所有数据,您需要在“任务”>“生成脚本”==>“脚本向导”中启用“脚本数据”,然后选择“脚本选项”部分。 - Arash
1
选项1:在最后一步的“准备数据”时出现错误。 选项2:在“选择要复制表格的数据库”之前出现错误。 - Emaborsa
1
我在两个数据库中都有数据...您的解决方案能否帮助解决这种情况? - SanamShaikh
1
在 SSMS 2019 中,不再支持脚本化数据。您必须使用导出功能。 - Rob
遇到了与@Emaborsa提到的相同问题。 - Abhi
显示剩余2条评论

19

将一个数据库表中的插入值示例插入到运行在同一SQL Server上的另一个数据库表中

insert into dbo.onedatabase.FolderStatus
(
  [FolderStatusId],
  [code],
  [title],
  [last_modified]
)

select [FolderStatusId], [code], [title], [last_modified]
from dbo.Twodatabase.f_file_stat

这对我起作用了,但是在 SqlExpress 2014 中,我不得不使用其他答案中发现的 .. 符号表示法,即:INSERT INTO [db1]..table1( ID, MetaTitle ) SELECT ID, MetaTitle FROM [db2]..table1 - Adam Hey
4
йЎәеәҸеә”иҜҘжҳҜ onedatabase.dbo.FolderStatus е’Ң Twodatabase.dbo.f_file_statгҖӮжҲ–иҖ…дҪ еҸҜд»ҘдҪҝз”Ё .. з¬ҰеҸ·пјҢе°ұеғҸ @AdamHey жҢҮеҮәзҡ„йӮЈж ·гҖӮ - bugybunny

12

如果您使用Azure,请按照Virus的修改后的说明进行操作:

  1. 打开SSMS。
  2. 右键单击要复制数据的数据库。
  3. 选择生成脚本 >> 选择特定数据库对象 >> 选择要传输的表/对象。 强调文本
  4. 在“保存到文件”窗格中,单击高级
  5. 将“脚本化的数据类型”设置为架构和数据
  6. 将“脚本删除和创建”设置为脚本删除和创建
  7. 在“表/视图选项”下,将相关项目设置为TRUE。虽然我建议全部设置为TRUE以防万一。生成脚本后,您始终可以修改它。
  8. 设置文件路径 >> 下一步 >> 下一步
  9. 打开新创建的SQL文件。从文件顶部删除“Use”。
  10. 在目标数据库上打开新的查询窗口,粘贴脚本内容(不要包含“Use”),并执行。

1
难以置信这仍然是7年后最好的解决方案,但这几乎是唯一对我有效的方法。非常感谢! - malthe.w

9
如果两个数据库在同一台服务器上,并且您想要转移整个表(制作副本),则可以使用简单的select into语句...
select * into anotherDatabase..copyOfTable from oneDatabase..tableName

您可以将光标放在sysobjects的顶部,然后以这种方式复制整个表集。

如果您需要更复杂的数据提取和转换,则可以使用SSIS并在其中构建适当的ETL。


2
如果您使用select * into语法,键和约束将不会被复制。 - ArieKanarie

5
你可以使用Visual Studio 2015。进入“工具” => “SQL服务器” => “新数据对比”。
选择“源”和“目标”数据库。

1
它是一个很棒的工具,尽管比较慢 :) - Mi.HTR

3
  1. 您可以使用管理工具备份和恢复数据库。
  2. 同样,您可以使用“复制数据库”功能从管理工具中进行操作。
  3. 如果有必要,您甚至可以手动完成此操作。我指的是手动创建目标数据库并通过SQL语句手动复制数据...

您能否澄清一下为什么要询问这个问题?是因为您没有经验还是其他原因?



2

3
这一切都很好,除了那个人删除了外键和主键,似乎没有把它们放回去...另外,答案不应该只是有效地链接到别人的东西吗? - Jon
1
@Jon 为什么你想在源数据库中恢复 PK 和 FK?最好的方法是在导出后将其复制并丢弃。 - Anubis
1
因为我想要做的是同步两个环境(即将QA下降到Develop,这样我们就不必复制他们所有的数据输入)。 - Jon

1

如果您知道FROM子句可以为表名指定数据库,那么可以通过T-SQL语句实现此操作。

insert into database1..MyTable
select from database2..MyTable

以下是 Microsoft 解释语法的方式: https://learn.microsoft.com/en-us/sql/t-sql/queries/from-transact-sql?view=sql-server-ver15

如果表或视图存在于 SQL Server 的另一个数据库中,请使用完全限定名称,格式为 database.schema.object_name

schema_name 可以被省略,就像上面一样,这意味着当前用户的默认模式。默认情况下,它是dbo

如果需要对列/行进行任何过滤,请确保在移动数据之前创建任何新表。


0

在两个不同的数据库之间以编程方式执行此操作可能涉及使用链接服务器的计划作业。但是,链接服务器需要具备DBA级别的知识才能设置。如果您无法使用链接服务器,只需编写一个程序,该程序1.从源表中读取一行并2.将其插入目标表中。程序员只需要使用具有对目标数据库表进行插入操作权限的连接字符串即可。我已经使用这两种方法解决了这些问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接