通过SQL查询连接到另一个SQL Server?

6

是否可以使用SQL查询连接到另一个SQL Server(以便可以在该服务器上运行查询并在当前服务器中使用结果集)。如果不行,为什么?


这个问题的简短回答是不行,因为你做不到。你能否详细说明一下你想要做什么,这样人们可能会更有用地提供帮助。 - Will
@Will - 我正在寻找一种SQL查询,可以在其中输入远程SQL服务器的IP、用户名、密码等信息,然后在本地计算机上查询该数据库,而无需在管理工具中输入所有这些内容。 - sequel.learner
顺便问一下,我想知道Oracle、DB2和MySQL等是否有类似的功能。 - sequel.learner
4个回答

6

是的,您可以通过使用链接服务器来连接另一个SQL Server,或者您可以通过使用openquery在服务器之间进行查询:

SELECT * FROM openquery([aa-db-dev01], 'Select * from TestDB.dbo.users')

查询链接的SQL服务器


抱歉打扰了:我们能同时连接多个服务器吗? - gary

2

仅适用于Microsoft SQL Server:

是的,这是可能的。您需要配置一个链接的Microsoft SQL Server。以下是相关信息:http://msdn.microsoft.com/en-us/library/ms188279.aspx

一旦您配置好了服务器,您的查询(在server1上)将如下所示:

SELECT TOP 10 * FROM server2.yourdatabase.yourschema.yourtable

这在MSSQL中可行。我更喜欢在EXEC语句中使用openquery或链接服务器名称,例如EXEC('Select * FROM ABC') AT LinkdedServerName。如果您正在通过ODBC连接MSSQL数据库和MySQL数据库,则不知道您的语法是否有效。 - Stefan Brendle
这个查询语句能用于访问远程服务器吗?在你的回答中,“server2”是指连接到服务器2的连接字符串吗? - sequel.learner
看起来是这样的。以下是运行sp_addlinkedserver过程的详细信息:http://msdn.microsoft.com/en-us/library/ff772782.aspx - Eugene

1

如果您有一个需要在两个SQL服务器的数据库上运行才能获得所需结果集(分布式查询)的查询,则不能简单地使用一个查询同时连接到两个不同的SQL服务器。

然后,您必须在本地SQL服务器中创建一个“链接服务器”,将其与第二个SQL服务器(远程SQL服务器)链接起来。

一旦在本地服务器中创建了链接服务器,您就可以使用一个查询从本地服务器的连接查询两个服务器。

链接服务器可以直接查询,也可以使用OPENQUERY查询。

直接链接服务器查询和链接服务器OPENQUERY之间存在性能差异。在直接查询中,整个数据都将从远程服务器返回到本地服务器,然后本地服务器将在本地处理过滤器;而在OPENQUERY中,该过程将在远程服务器上完成,并且本地服务器仅获取经过筛选的数据集。


-1
这段代码适用于SQL 2012。 它会显示在一个灰色框中。 必须在运行其他服务器上的SQL之前运行,否则代码将在连接到的任何服务器/数据库上运行。像@@Servername和SERVERPROPERTY这样的本地变量返回与所连接的服务器相同的结果。这真是出乎意料!!!
:Connect servername 例如从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

1
@@ 是全局变量,这就是为什么它们会根据您连接的服务器而改变。 - Ben Personick

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