繁体   English   中英

如何将数据从一台SQL服务器上的数据库复制到另一台SQL服务器上的数据库?

[英]How do you copy data from a DB on one SQL server to a DB on another SQL server?

我不是在尝试将数据从一台服务器直接复制到另一台服务器。 我必须先清理/重命名源数据,然后再将其插入到目标DB中,并检查各种查找表中是否存在值,如果不存在,则将其插入。

基本上是这样的:

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。

编辑-我不相信我可以让客户端根据https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-addlinkedserver-创建链接服务器transact-sql?view = sql-server-2017

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

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');

如果您都没有AD登录名,则需要使用SQL身份验证。 如果那不是一个选择,那么您将不得不完全走另一条路。

另一种选择是使用SSIS。

  1. 为每个服务器创建连接管理器
  2. 创建一个数据流任务。
  3. 将源和目标添加到每个表的数据流任务中。
  4. 将转换查询放入连接到源服务器的源中。
  5. 在连接到目标服务器的目标中映射列。
  6. 执行包。
  7. 鲍勃是你的叔叔。

这也假定您对两个框都具有权限,但是您无需要求任何客户来完成它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM