我有一个SQL数据库,该数据库托管在我无法控制的服务器上的云中。 我可以连接到该服务器,并通过Management Studio使用类似于reports.theremotesite.net
的URL并使用SQL身份验证来查看数据库。
我想查询该数据库提供的某些视图,并将结果行复制到我的计算机上保存的本地数据库中。 我在本地使用SQL Server 2008 R2。
我的研究表明,设置链接服务器是执行此操作的第一步,但我一直在努力使用T-SQL进行设置。
(我知道您可以通过Management Studio进行设置,但我的最终目标是将其作为存储过程存储在本地数据库中,每晚都会调用一次,因此我一直试图使其完全基于脚本。我是否正在制作一个错误?)
我已经阅读了有关sp_addlinkedserver和sp_addlinkedsrvlogin的文档,但是我不完全了解在脚本中将不同参数放在何处。
示例服务器详细信息:
服务器名称 :reports.theremotesite.net
身份验证 :SQL Server身份验证
登录名 :MyUsername
密码 :MyPassword
数据库 :MyRemoteDatabase
当地详细信息:
服务器名称 :本地主机
身份验证 :Windows身份验证
数据库 :MyLocalDatabase
我的脚本结构如下:
USE [master];
GO
EXEC master.dbo.sp_addlinkedserver
@server = N'localhost',
@srvproduct = N'',
@provider = N'SQLNCLI',
@datasrc = N'tcp:reports.theremotesite.net',
@catalog = N'master';
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'reports.theremotesite.net',
@useself = N'False',
@locallogin = NULL,
@rmtuser = 'MyUsername'
@rmtpassword = 'MyPassword';
GO
运行脚本时,出现以下错误:
服务器“ reports.theremotesite.net”不存在。 使用sp_helpserver显示可用的服务器。
运行sp_helpserver显示2行,其中一行带有我的计算机名,另一行名为localhost,我认为这是脚本的结果,即使脚本未完成。
由于我完全迷路,任何帮助或指示都将是奇妙的!
sp_addlinkedserver
创建具有您提供的链接的远程服务器的链接。 所以我会做:
EXEC sp_addlinkedserver
@server = N'reports',
@provider = N'SQLNCLI',
@datasrc = N'tcp:reports.theremotesite.net',
@catalog = N'master';
这样做之后,您应该在sys.servers
有两行,一行用于本地实例,另一行用于reports
。 但是您尚未告诉链接如何进行身份验证。 要做到这一点:
EXEC sp_addlinkedsrvlogin
@rmtsrvname = N'reports', -- has to match the server name in sp_addlinkedserver
@useself = N'False',
@rmtuser = 'MyUsername'
@rmtpassword = 'MyPassword';
即使身份验证失败,如果您过去了sp_addlinkedserver
,也必须使用sp_dropserver
才能使链接脱离sys.servers
:
EXEC sp_dropserver N'reports'; -- has to match the server name in sp_addlinkedserver