如何在SQL脚本中从另一个SQL服务器的表中选择数据?

4
我想知道如何在SQL脚本中从另一个SQL Server实例的表中查询数据。
我正在编写运行在127.0.0.1\SQLINSTANCE1上的SQL脚本,但是在脚本内部需要从127.0.0.2\SQLINSTANCE2选择数据,然后将结果数据作为计算的一部分返回。
经过搜索,似乎可以使用sp_addlinkedserversp_addlinkedsrvlogin存储过程来完成这个任务,但不幸的是没有完整可用的示例。
我已经做了一些工作,但效果不尽如人意。例如,当再次执行时会弹出一些错误,比如服务器已经链接。但是我该如何执行此脚本以链接服务器,然后放弃它?
DECLARE @remoteserver VARCHAR = '127.0.0.2\SQLINSTANCE2';

EXEC master.sys.sp_addlinkedserver  @server = @remoteserver
                                ,   @srvproduct = 'SQL Server';

EXEC master.sys.sp_addlinkedsrvlogin    @rmtsrvname = @remoteserver
                                    ,   @useself = 'false'
                                    ,   @locallogin = NULL
                                    ,   @rmtuser = 'sa'
                                    ,   @rmtpassword = 'password';

另一方面,我该如何为这个丑陋的远程服务器名称创建别名?我更愿意使用一些优雅的名称,如RS,在select * from [RS].[db].[dbo].[table]中。


为什么需要“放弃”链接服务器?难道你不能只创建一次链接服务器,然后每次在脚本中使用它吗? - Nenad Zivkovic
2个回答

2
您确实可以使用HTML标签

来格式化文本。

OPENDATASOURCE

或者
OPENROWSET

请注意,您需要启用特别分布式查询选项:
sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

1
你可以使用OPENROWSET,这样就不需要创建和删除链接服务器了。

Jebus89的回答中的sp_configure语法很有帮助。 - Wietze314

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接