【问题标题】:Copy columns and its data from a table in one database to another table in a different server将列及其数据从一个数据库中的表复制到不同服务器中的另一个表
【发布时间】:2016-03-22 04:27:01
【问题描述】:

我有 2 个表,TABLE1 在 server1 上的数据库中包含列 col1、col2、col3、col4col5。我的 TABLE2 具有与 TABLE1 相同的列和几乎相同的数据,但 server2 上的数据库中的列 col2col5 除外。 TABLE2 在 col1、col3 和 col4 中的数据与 TABLE1 相同。现在我知道我可以创建一个新表并使用 sql-server 的导入/导出功能。但如果表有大量数据和更多列,这将是不可行的。

所以我的问题是有什么方法可以通过任何其他方式将 col2col5 中的数据插入到 TABLE2 中?如果可能的话,我想确保插入的数据是 col2 并且 TABLE2 中的 col5 与 TABLE1 的数据相匹配,这意味着如果我有 col1 有数据让我们说 5 并且 col2 有数据 xyz,希望这些数据插入到这一行。 (仅供参考 col1 是两个表的主键)。

两台服务器都是sql server 2008r2。

【问题讨论】:

  • 您为什么不将新列 col2col5 添加到 table2 上的 server2 并同时插入所有列?或者,如果您在添加列之前已导入数据,那么您可以加入您的 PK 并更新新添加的列。
  • 对,我可以在同一服务器的同一数据库上的 2 个表之间执行此操作。将这些数据移动到不同的服务器时我会怎么做?我需要做一些不同的事情吗?我对 sql 服务器很陌生。
  • 您需要创建一个链接服务器。详细信息在下面的答案中。

标签: sql sql-server database sql-server-2008 tsql


【解决方案1】:

如果两个 SQL 服务器在同一网络上,则在 server2 上创建一个链接服务器。

How to create the linked server for SQL Server 2008 where we have the database from 2000 and 2005

如果您希望保持 Id 列相同,您可能需要执行 IDENTITY INSERT。

How to turn IDENTITY_INSERT on and off using SQL Server 2008?

您可以按照以下方式编写 INSERT 语句:

INSERT INTO [server2].[database1].[table1] ( col1, col3, col5 )
SELECT col1, col3, col5 FROM [server1].[database1].[table1]

如果您不想引入重复键,请使用WHERE NOT EXISTS col1 IN ( ... )

如果您不想引入重复行,请使用EXCEPT 语句。

希望对你有所帮助。

【讨论】:

  • 谢谢。设置链接服务器后,我最终在 col1 上加入了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
相关资源
最近更新 更多