跨服务器SQL查询从一个表读取(共享)并写入另一个(本地)

时间:2012-04-05 13:58:02

标签: sql-server local shared cross-server

我一直很难在一台服务器上读取一个表并写入我硬盘上的另一个现有表(本地...使用SQL Server Express创建)。

这是我的代码:

insert into [DPS-ABC1DE2\SQLEXPRESS].my_LOCAL_DATABASE.dbo.SHIPMENTS
select
    CUST_NUMBER,
    SHIPMENT_ID,
    SHIP_DATE,
    MODE_CODE,
    MILES,
    WEIGHT,
    AMOUNT_PAID
from SHARED_DATABASE.dbo.SHIPMENTS
where datepart(year,SHIP_DATE)= 2012 and datepart(month,SHIP_DATE) = 1

运行时出现以下错误消息:

  

Msg 7202,Level 11,State 2,Line 7
  在sys.servers中找不到服务器'DPS-ABC1DE2 \ SQLEXPRESS'。验证是否正确   服务器名称已指定。如有必要,请执行存储过程   sp_addlinkedserver将服务器添加到sys.servers。

所以我尝试使用

EXEC sp_addlinkedserver [DPS-ABC1DE2\SQLEXPRESS]

但是我收到了这个错误:

  

“消息15247,级别16,状态1,过程sp_MSaddserver_internal,第29行
  用户无权执行此操作。“

我是一名新手SQL程序员,所以我不得不对此进行广泛研究,但没有成功。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

sp_addlinkedserver执行权限默认授予sysadmin和setupadmin固定服务器角色的成员。查看link有关如何在sql server 2005上对其进行排序的问题。

一旦摆脱了该问题,您可以使用以下内容链接并登录到其他服务器。

--add the linked server and then login
EXEC sp_addlinkedserver 'DPS-ABC1DE2\SQLEXPRESS',N'SQL Server';

EXEC sp_addlinkedsrvlogin @rmtsrvname='DPS-ABC1DE2\SQLEXPRESS', 
        @useself='false',
        @rmtuser='login_username',
        @rmtpassword='login_password'

--do your job here                    
Insert into [DPS-ABC1DE2\SQLEXPRESS].my_LOCAL_DATABASE.dbo.SHIPMENTS
Select...

--drop the linked server login and then drop the server
EXEC sp_droplinkedsrvlogin 'DPS-ABC1DE2\SQLEXPRESS', NULL
EXEC sp_dropserver 'DPS-ABC1DE2\SQLEXPRESS', NULL;

希望这会有所帮助......