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

Use T-SQL to create a linked server between localhost and a cloud server

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

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

进行设置

(我知道您可以通过 Management Studio 设置它们,但我的最终目标是将其作为存储过程存储在我的本地数据库中,每晚都会调用它,所以我一直在尝试让它完全基于脚本。我犯错了吗?)

我已经阅读了关于 sp_addlinkedserver and sp_addlinkedsrvlogin 的文档,但我没有完全理解将不同参数放在脚本中的什么位置。

示例服务器详细信息:

Server name: reports.theremotesite.net
Authentication: SQL Server Authentication
Login: MyUsername
Password: MyPassword
Database: MyRemoteDatabase

本地详细信息:

Server name: localhost
Authentication: Windows Authentication
Database: 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

当我 运行 脚本时,出现以下错误:

The server 'reports.theremotesite.net' does not exist. Use sp_helpserver to show available servers.

运行 sp_helpserver 显示 2 行,一行是我的机器名称,另一行是本地主机,我认为这是脚本的结果,即使它没有完成。

任何帮助或指点都会很棒,因为我完全迷路了!

sp_addlinkedserver 创建一个 link 到具有您提供的 link 的远程服务器。所以我会这样做:

EXEC sp_addlinkedserver 
    @server = N'reports', 
    @provider = N'SQLNCLI', 
    @datasrc = N'tcp:reports.theremotesite.net', 
    @catalog = N'master';

这样做之后,您应该在 sys.servers 中有两行,一行用于您的本地实例,另一行用于 reports。但是您还没有告诉 link 如何进行身份验证。为此:

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_dropserversys.servers中获取link:

EXEC sp_dropserver N'reports'; -- has to match the server name in sp_addlinkedserver