是否可以使用 SQL 查询连接到另一个 SQL Server(这样人们也可以在该服务器上运行查询并使用当前服务器中的结果集)。如果不是,那为什么?
4 回答
是的,您可以使用 Linked Server 完成连接到另一个 SQL Server,或者您可以使用 openquery 通过服务器进行查询:
SELECT * FROM openquery([aa-db-dev01], 'Select * from TestDB.dbo.users')
仅限 Microsoft SQL Server:
对的,这是可能的。您必须配置链接的 Microsoft SQL Server。这是信息:http: //msdn.microsoft.com/en-us/library/ms188279.aspx
配置好服务器后,您的查询(在 server1 上)将如下所示:
SELECT TOP 10 * FROM server2.yourdatabase.yourschema.yourtable
如果您的查询需要在 2 个 SQL 服务器的数据库上运行以获取所需的结果集(分布式查询),则不可能通过一个查询同时连接到 2 个不同的 SQL 服务器
然后您必须在本地 SQL 服务器中创建一个“链接服务器” “链接到”第二个 SQL 服务器(远程 SQL 服务器)
在本地服务器中创建链接服务器后,您可以使用本地服务器连接中的一个查询来查询两台服务器。
可以直接或使用OPENQUERY查询链接的服务器。
“直接链接服务器查询”和“链接服务器 OPENQUERY ”之间存在性能差异,因为在直接查询中,整个数据将从远程服务器传回本地服务器,然后本地服务器将在本地处理过滤器,而在 OPENQUERY 中该过程将在远程服务器上完成,本地服务器将仅获取过滤后的数据集
这在 SQL 2012 中有效。显示在灰色框中 必须在 SQL 之前运行才能在其他服务器上运行,否则代码运行在查询窗口连接到的任何服务器/数据库上。@@Servername 和 SERVERPROPERTY 等局部变量返回与连接到的服务器相同的结果。真是出乎意料!!!!
:连接服务器名
从 SQLTEST 运行的示例
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
:Connect CSQL2008
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
产生:
CSQL2008
CSQL2008
CSQL2008
尽管
select distinct( server_name) from msdb.dbo.backupset
go
:Connect CSQL2012
select distinct( server_name) from msdb.dbo.backupset ;
go
select distinct( server_name) from msdb.dbo.backupset ;
产生:
SQLTEST
CSQL2012
CSQL2012