【问题标题】:How to copy all rows from one SQL Server table to a table on a different SQL Server如何将所有行从一个 SQL Server 表复制到不同 SQL Server 上的表
【发布时间】:2017-06-07 04:57:42
【问题描述】:

我在 SQL Server 2008 中有一个数据库,在 SQL Server 2016 中有相同的数据库(备份)。所有架构和表都完全相同。

我需要将 SQL Server 2008 中的一个表中的所有行复制到 SQL Server 2016 中的同一个表中。如何实现?

【问题讨论】:

  • 你需要设置链接服务器。
  • 或者您可以为该表对象(带有数据)生成脚本并在目标服务器上执行相同的脚本。

标签: sql-server sql-server-2008 sql-server-2016


【解决方案1】:
  1. 链接服务器
  2. BCP
  3. 创建新数据库,将数据复制到新数据库,备份,在目标服务器上还原为新数据库,将数据从目标新数据库更新到现有目标数据库。

【讨论】:

  • BCP? “当前最佳实践”?
  • 批量复制程序实用程序 - 用于导出/导入数据的本机 MS SQL Server 工具
【解决方案2】:

使用脚本表作为/创建脚本步骤中的脚本在目标服务器上创建表 在目标服务器上,您可以发出 T-SQL 语句:

INSERT INTO dbo.YourTableNameHere
   SELECT *
   FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere

【讨论】:

    【解决方案3】:

    如果它只是一次提取,我不会费心设置链接服务器,而是使用 SQL Server Management Studio 中的导出数据功能。

    为此,请右键单击 SSMS 中的源数据库,然后选择“任务”->“导出数据”。您可以使用向导准确指定要导出的内容(即一个或多个表,甚至使用查询的数据),指定目标,并选择是要运行包还是保存以供以后使用。

    【讨论】:

    • 在某种程度上是正确的,尽管我发现我经常需要返回原始数据库才能将更多信息复制/传输到新数据库中。链接服务器连接是一种非常方便的方法。虽然很明显,您需要意识到链接的服务器可能彼此相距很远,因此您通常应该避免在它们之间的表上使用任何类型的JOINs。
    • @cars10 我更担心链接服务器的安全隐患,以及查询远程服务器时可能出现的锁定问题。但是,只要知道缺点,应该没问题。话虽如此,在一次性提取的情况下,我仍然认为链接服务器就像用大炮射蚊子一样。
    • 我想这取决于用例。我的链接服务器都在一个公共防火墙内,并用于公司内部业务,因此安全很重要,但不如可公开访问的服务器那么重要。并且能够在它们之间快速交换数据对我帮助很大。
    【解决方案4】:

    您可以使用 OpenRowSet 的另一个选项,例如:

    SELECT * into insertTable FROM 
    OPENROWSET('SQLNCLI', 'Server=ServerIP\ServerExtentionNameIfhas;Database=dbname;Uid=uname;PWD=password;'
    ,'SET FMTONLY OFF;SET NOCOUNT ON;SELECT * FROM fromTable')
    

    这将创建automatically 一个名为inserTable 的表并将所有行复制到其中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多