使用T-SQL在本地主机和云服务器之间创建链接服务器

问题描述 投票:0回答:1

我有一个SQL数据库,该数据库托管在我无法控制的服务器上的云中。 我可以连接到该服务器,并通过Management Studio使用类似于reports.theremotesite.net的URL并使用SQL身份验证来查看数据库。

我想查询该数据库提供的某些视图,并将结果行复制到我的计算机上保存的本地数据库中。 我在本地使用SQL Server 2008 R2。
我的研究表明,设置链接服务器是执行此操作的第一步,但我一直在努力使用T-SQL进行设置。

(我知道您可以通过Management Studio进行设置,但我的最终目标是将其作为存储过程存储在本地数据库中,每晚都会调用一次,因此我一直试图使其完全基于脚本。我是否正在制作一个错误?)

我已经阅读了有关sp_addlinkedserversp_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,我认为这是脚本的结果,即使脚本未完成。

由于我完全迷路,任何帮助或指示都将是奇妙的!

sql-server tsql linked-server
1个回答
2
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.