【问题标题】:Connect to another SQL Server via SQL Query?通过 SQL Query 连接到另一个 SQL Server?
【发布时间】:2019-10-31 04:17:06
【问题描述】:

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

【问题讨论】:

  • 对此的简短回答是否定的,因为你不能。您能否详细说明您正在尝试做的事情,也许人们可以提供更有用的帮助。
  • @Will - 我正在寻找一个 SQL 查询,您可以在其中输入远程 SQL 服务器的 IP、用户名、密码等,然后在本地计算机上查询该数据库,而无需输入所有那些东西到管理工作室之类的。
  • 顺便问一下oracle、db2、mysql等有没有类似的特性。

标签: sql sql-server


【解决方案1】:

是的,您可以使用 Linked Server 连接到另一个 SQL Server,也可以使用 openquery 通过服务器查询:

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

Querying a linked sql server

【讨论】:

  • 抱歉,necropost:我们可以同时连接到多个服务器吗?
【解决方案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。我更喜欢使用openquery 或EXEC 语句中的链接服务器名称,例如EXEC('Select * FROM ABC') AT LinkdedServerName。不知道,如果你的语法工作正常,如果你通过 ODBC 使用带有 mysql 数据库的 mssql 数据库。
  • 此查询是否适用于访问远程服务器?在您的回答中,“server2”是服务器 2 的连接字符串吗?
  • 看起来像。以下是运行 sp_addlinkedserver 过程的详细信息:msdn.microsoft.com/en-us/library/ff772782.aspx
【解决方案3】:

如果您有一个查询需要在 2 个 SQL 服务器的数据库上运行以获得所需的结果集(分布式查询),那么不可能通过一个查询同时连接到 2 个不同的 SQL 服务器

那么您必须必须在您的本地 SQL 服务器中创建一个“链接服务器”“链接到”第二个 SQL 服务器(远程 SQL 服务器)

在您的本地服务器中创建链接服务器后,您可以使用本地服务器连接中的一个查询来查询两台服务器。

可以直接查询或使用OPENQUERY查询链接的服务器。

'Direct Linked Server Query' 和 'Linked Server OPENQUERY' 之间存在性能差异,因为在直接查询中,整个数据将被飞回本地服务器来自远程服务器,然后本地服务器将在本地处理过滤器,而在 OPENQUERY 中,该过程将在远程服务器上完成,本地服务器将仅获得过滤后的数据集 p>

【讨论】:

    【解决方案4】:

    这适用于 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
    

    【讨论】:

    • @@ 是全局变量,这就是为什么它们会根据您连接的服务器而变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    相关资源
    最近更新 更多