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

问题描述:

我一直在尝试读取一台服务器上的表并写入到我的硬盘驱动器上的另一个现有表(本地...使用SQL Server Express创建)。跨服务器SQL查询从一个表(共享)读取并写入到另一个(本地)

这里是我的代码:

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
Could not find server 'DPS-ABC1DE2\SQLEXPRESS' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.

所以我用

EXEC sp_addlinkedserver [DPS-ABC1DE2\SQLEXPRESS] 

尝试,但我得到这个错误:

"Msg 15247, Level 16, State 1, Procedure sp_MSaddserver_internal, Line 29
User does not have permission to perform this action."

我是一名菜鸟SQL程序员,所以我不得不广泛研究这个,但没有成功。任何帮助,将不胜感激!

+1

“用户没有执行此操作的”权限 - 您没有足够的权限,就这么简单 – 2012-04-05 14:05:23

+0

仅供参考,跨服务器查询可以是[恕我直言]非常难以持续工作,它绝对是一个先进的科目,至少只要你认为自己是一个新手,你应该警惕的。 – 2012-04-05 14:10:54

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; 

希望这有助于...