使用T-Sql,如何从远程服务器上的一个表插入本地服务器上的另一个表?

时间:2010-12-23 19:03:27

标签: sql sql-server-2005 tsql

鉴于远程服务器'Production'(目前可通过IP访问)和本地数据库'Development',如何使用T-SQL从'Production'运行INSERT到'Development'?

我正在使用MS SQL 2005,两个数据库之间的表结构有很大不同,因此需要我手动编写一些迁移脚本。

更新

T-SQL真的不是我的包。我尝试了以下(不知道我在做什么):

EXEC sp_addlinkedserver 
    @server = N'20.0.0.1\SQLEXPRESS', 
    @srvproduct=N'SQL Server' ;

GO

EXEC sp_addlinkedsrvlogin '20.0.0.1\SQLEXPRESS', 'false', 
    'Domain\Administrator', 'sa', 'saPassword'

SELECT * FROM [20.0.0.1\SQLEXPRESS].[DatabaseName].[dbo].[Table]

我收到错误:

  

用户登录失败''。用户是   与受信任的SQL无关   服务器连接。

5 个答案:

答案 0 :(得分:7)

创建linked server,然后使用4部分表示法

insert table
select <column names>
from LinkedserverName.DatabaseName.SchemaName.TableName

您也可以使用OPENROWSET

例如

insert table
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',
     'SELECT GroupName, Name, DepartmentID
      FROM AdventureWorks2008R2.HumanResources.Department
      ORDER BY GroupName, Name') AS a;

尝试此操作以创建登录

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'20.0.0.1\SQLEXPRESS',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'sa',
@rmtpassword='saPassword'

答案 1 :(得分:1)

您可以将PROD服务器定义为DEV框的链接服务器,然后访问它。 但是我认为从PROD Box获取备份并将其恢复到DEV或使用SSIS进行模式导入会更容易。

答案 2 :(得分:1)

查看RedGate工具,尤其是SQL数据比较。如果这不是一个选项,您应该查看OPENDATASOURCEOPENROWSET来访问远程数据库。

答案 3 :(得分:0)

您可以使用链接服务器,然后使用对象的4个部分名称(有关如何设置链接服务器,请参阅BOL) 或者,您可以使用SSIS设置数据迁移并连接到远程服务器 或者您可以使用OPENROWSET

我可能会使用SSIS,但我已经熟悉它了。

答案 4 :(得分:0)

使用SSMS。右键单击目标数据库,然后选择“任务”,“导入数据”。您将能够预览数据并直观地进行转换。将包保存在SSIS中或立即运行。