使用 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_dropserver
从sys.servers
中获取link:
EXEC sp_dropserver N'reports'; -- has to match the server name in sp_addlinkedserver
我有一个 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_dropserver
从sys.servers
中获取link:
EXEC sp_dropserver N'reports'; -- has to match the server name in sp_addlinkedserver