代码之家  ›  专栏  ›  技术社区  ›  bmw0128

SQL Server链接服务器示例查询

  •  80
  • bmw0128  · 技术社区  · 14 年前

    在Management Studio中,我试图在两个链接服务器之间运行查询/连接。 这是使用链接数据库服务器的正确语法吗:

    select foo.id 
    from databaseserver1.db1.table1 foo, 
         databaseserver2.db1.table1 bar 
    where foo.name=bar.name
    

    基本上,您只是在db.table前面加上db服务器名吗?

    11 回复  |  直到 14 年前
        1
  •  177
  •   ChrisLively    10 年前

    格式应该是:

    <server>.<database>.<schema>.<table>
    

    例如:


    :我知道这是一个老问题,我得到的答案是正确的;但是,我认为任何其他人在这个问题上的绊脚石应该知道一些事情。

    也就是说,在连接情况下查询链接服务器时 全部 可能的 下载到执行查询的服务器以执行联接操作。在手术室,两个 table1 DB1 DB2 将全部传输到执行查询的服务器,可能名为 DB3 .

    如果你有大桌子,这个 可以 导致需要很长时间才能执行的操作。毕竟,它现在受到网络通信速度的限制,网络通信速度比内存甚至磁盘传输速度慢几个数量级。

    如果可能,在不加入本地表的情况下对远程服务器执行单个查询,以将所需的数据拉入临时表。那就别问了。

    这是不可能的,然后您需要查看各种可能导致SQL server必须在本地加载整个表的情况。例如使用 GETDATE() 甚至某些连接。其他的性能杀手包括不给予适当的权利。

    http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ 了解更多信息。

        2
  •  28
  •   Akhilesh Kamate    9 年前
    SELECT * FROM OPENQUERY([SERVER_NAME], 'SELECT * FROM DATABASE_NAME..TABLENAME')
    

        3
  •  10
  •   Arulkumar KP.    7 年前

    如果你仍然觉得 <server>.<database>.<schema>.<table>

    将服务器名称括在 []

        4
  •  9
  •   Nielsvh    6 年前

    ,尝试 OPENQUERY

    例子:

     SELECT * FROM OPENQUERY([LinkedServer], 'select * from [DBName].[schema].[tablename]') 
    
        5
  •  8
  •   Joe Stefanelli    14 年前

    您需要指定模式/所有者(默认情况下为dbo)作为引用的一部分。此外,最好使用较新的(ANSI-92)连接样式。

    select foo.id 
        from databaseserver1.db1.dbo.table1 foo
            inner join databaseserver2.db1.dbo.table1 bar 
                on foo.name = bar.name
    
        6
  •  6
  •   altocumulus    9 年前
    select * from [Server].[database].[schema].[tablename] 
    

    这是正确的打电话方式。 在执行查询之前,请确保已链接服务器!

    EXEC sys.sp_linkedservers 
    
        7
  •  4
  •   Jaspreet Singh    7 年前
    select name from drsql01.test.dbo.employee
    
    • drslq01是服务器名称--链接服务器
    • employee是表名

    我希望它有助于理解如何对链接服务器执行查询

        8
  •  2
  •   Jason Roman    9 年前

    SELECT *
    FROM OPENQUERY(Linked_Server_Name , 'select * from TableName where ID = 500')
    
        9
  •  2
  •   Sean Warren    7 年前

    值得一提的是,我发现以下语法最有效:

    从[链接的服务器]…[表]中选择*

        10
  •  2
  •   Shimon Doodkin    7 年前

    右键单击表,然后单击脚本表作为选择

    enter image description here

        11
  •  0
  •   Vijay S KernelPanik    7 年前

    尝试此查询:

    SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT * FROM [DATABASE_NAME].[SCHEMA].[TABLE_NAME]')