Sql server 如何将数据从一台SQL server上的数据库复制到另一台SQL server上的数据库?

Sql server 如何将数据从一台SQL server上的数据库复制到另一台SQL server上的数据库?,sql-server,Sql Server,我并没有试图将数据从一台服务器直接复制到另一台服务器。在将源数据插入目标数据库之前,我必须清理/重命名源数据,并检查各种查找表中是否存在值,如果不存在,则插入值 基本上是这样的: SELECT EmployeeID, FirstName, LastName, Region INTO #Temp FROM server1.db1.dbo.Employees INSERT INTO server2.db2.dbo.Region (Region) SELECT DISTINCT Region FRO

我并没有试图将数据从一台服务器直接复制到另一台服务器。在将源数据插入目标数据库之前,我必须清理/重命名源数据,并检查各种查找表中是否存在值,如果不存在,则插入值

基本上是这样的:

SELECT EmployeeID, FirstName, LastName, Region
INTO #Temp
FROM server1.db1.dbo.Employees

INSERT INTO server2.db2.dbo.Region
(Region)
SELECT DISTINCT Region FROM #Temp
WHERE Region NOT IN (SELECT Region FROM server2.db2.dbo.Region)

INSERT INTO server2.db2.dbo.Employees
(EmployeeID, FullName, Region)
SELECT EmployeeID, FirstName + ' ' + LastName AS FullName, Region FROM #Temp

DROP TABLE #Temp
但是,使用像serverName.DBname.DBTable这样的完全限定名似乎不起作用

我正在使用SQL Server 2012


编辑——我不相信我能让客户端按照创建链接服务器。

如果你不能设置链接服务器(我建议你这样做),你可以使用
OPENROWSET
。此假设您在这两个实例上都有一个具有相关权限的广告帐户。您还需要连接到要将数据插入的实例,而不是数据来自的服务器。这应该给你一个想法:

USE db2;
GO

INSERT INTO dbo.Employees (EmployeeID, FullName, Region)
SELECT EmployeeID, FirstName + ' ' + LastName AS FullName, Region
FROM OPENROWSET('SQLNCLI','SERVER=server2;Trusted_Connection=yes',
                N'SELECT EmployeeID, FirstName, LastName, Region FROM db1.dbo.Employees');

如果两者都没有广告登录,则需要使用SQL身份验证。如果这不是一个选项,那么您将不得不走一条完全不同的道路。

如果您不能设置链接服务器(我建议您这样做),您可以使用
OPENROWSET
。此假设您在这两个实例上都有一个具有相关权限的广告帐户。您还需要连接到要将数据插入的实例,而不是数据来自的服务器。这应该给你一个想法:

USE db2;
GO

INSERT INTO dbo.Employees (EmployeeID, FullName, Region)
SELECT EmployeeID, FirstName + ' ' + LastName AS FullName, Region
FROM OPENROWSET('SQLNCLI','SERVER=server2;Trusted_Connection=yes',
                N'SELECT EmployeeID, FirstName, LastName, Region FROM db1.dbo.Employees');

如果两者都没有广告登录,则需要使用SQL身份验证。如果这不是一个选项,那么您将不得不走一条完全不同的道路。

另一个选项是使用SSI

  • 创建到每个服务器的连接管理器
  • 创建数据流任务
  • 将源和目标添加到每个表的数据流任务中
  • 将转换查询放入连接到源服务器的源中
  • 在连接到目标服务器的目标中映射列
  • 执行包
  • 鲍勃是你叔叔

  • 这还假设您对这两个框都有权限,但您不需要向客户端请求任何东西来完成它。

    另一个选项是使用SSI

  • 创建到每个服务器的连接管理器
  • 创建数据流任务
  • 将源和目标添加到每个表的数据流任务中
  • 将转换查询放入连接到源服务器的源中
  • 在连接到目标服务器的目标中映射列
  • 执行包
  • 鲍勃是你叔叔

  • 这还假设您对这两个框都有权限,但您不需要要求客户做任何事情。

    您说的“似乎不起作用”是什么意思?要引用连接到的服务器(&数据库)上的数据,您只需要使用2部分命名,但对于另一部分,如果是链接服务器4部分命名,则可以使用。@Larnu当我尝试使用4部分命名时,所有内容都以红色突出显示,它抱怨在sys.servers中找不到服务器“serverName”。红色为intellisense,无法获取链接服务器上对象的详细信息;这并不意味着该对象不存在。但是,后一个错误意味着您尚未将远程服务器配置为链接服务器server@Larnu好啊这是一个问题,因为我无法让客户端链接他们的服务器。你说“似乎不工作”是什么意思?要引用连接到的服务器(&数据库)上的数据,您只需要使用2部分命名,但对于另一部分,如果是链接服务器4部分命名,则可以使用。@Larnu当我尝试使用4部分命名时,所有内容都以红色突出显示,它抱怨在sys.servers中找不到服务器“serverName”。红色为intellisense,无法获取链接服务器上对象的详细信息;这并不意味着该对象不存在。但是,后一个错误意味着您尚未将远程服务器配置为链接服务器server@Larnu好啊这是一个问题,因为我无法让客户端链接他们的服务器。我以前没有使用SSIS,但我在测试环境中尝试过。不幸的是,在完成上述操作之后,一切似乎都很顺利,我得到了所有绿色的复选标记,检查了data viewer,并且源和目标之间的一切都很好。但此后,目标数据库中没有出现新数据。我确信由于不熟悉SSIS,我遗漏了一些东西。这是出乎意料的。我会检查连接管理器中的目标数据库,并确保您指向的是您想要的服务器和数据库。我曾经在同一台服务器上有一个测试和开发数据库,它们有相同的模式,所以可能指向错误的数据库。开发和测试服务器也是如此。看起来数据可能去了某个地方,或者它会抛出一个错误。我以前没有使用SSIS,但我在测试环境中尝试了这一点。不幸的是,在完成上述操作之后,一切似乎都很顺利,我得到了所有绿色的复选标记,检查了data viewer,并且源和目标之间的一切都很好。但此后,目标数据库中没有出现新数据。我确信由于不熟悉SSIS,我遗漏了一些东西。这是出乎意料的。我会检查连接管理器中的目标数据库,并确保您指向的是您想要的服务器和数据库。我曾经在同一台服务器上有一个测试和开发数据库,它们有相同的模式,所以可能指向错误的数据库。开发和测试服务器也是如此。看起来数据可能去了什么地方,否则就会抛出错误。