【问题标题】:Querying a linked sql server查询链接的 sql server
【发布时间】:2009-01-30 14:42:58
【问题描述】:

我添加了一个链接服务器,它显示在链接服务器列表中,但是当我查询它时,它会引发数据库服务器名称错误。

EXEC sp_helpserver
EXEC sp_addlinkedserver 'aa-db-dev01'
Select * from openquery('aa-db-dev01','Select * from TestDB.dbo.users')

消息 102,第 15 级,状态 1,第 1 行
'aa-db-dev01' 附近的语法不正确。

【问题讨论】:

    标签: sql-server linked-server


    【解决方案1】:
    SELECT * FROM [server].[database].[schema].[table]
    

    这对我有用。 SSMS intellisense 可能仍会将此作为语法错误下划线,但如果您的链接服务器已配置并且您的查询在其他方面是正确的,它应该可以工作。

    【讨论】:

    • 从我所做的测试来看,虽然 4part 命名确实有效,但它最终比使用 openquery 慢。
    • 如果您的表定义包含xml 列类型,此方法也将不起作用。
    • @Hack-R 是否注册为链接服务器?
    • @AndreasNiedermair 它是......现在你提到它,显然有人删除了它。谢谢。
    • @AndreasNiedermair A) SQL Server 只是链接服务器关系的 一半 - 您直接访问的服务器。 “其他”链接服务器可能是也可能不是 SQL Server,并宣布 4 点部分是引用它的方式,它会让那些链接非 SQL Server 的人摸不着头脑,想知道为什么它不起作用他们 B)我不明白你在说什么非关系上下文。链接服务器仍然可以是关系服务器;只是在链接服务器位置处理查询可能无法完全完成
    【解决方案2】:

    您需要删除链接服务器名称周围的引号。应该是这样的:

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

    【讨论】:

    • 这样你会失去智能感知,所以从开发的角度来看,如果可以的话,你可以使用其他方式,但如果提供者不公开目录或架构,则必须使用这种方式。
    • 使用此选项,查询有 8000 个字符的限制。仍在尝试为此找到解决方法。 exec (@Query) at LinkedServerName 似乎可以解决这个问题,但我无法将结果与其他表连接。尝试使用临时表没有运气。
    【解决方案3】:

    你可以使用:

    SELECT * FROM [aa-db-dev01].[TestDB].[dbo].[users];
    

    【讨论】:

    • 这在某些 -SQL-Server 链接服务器上不起作用,导致...为链接服务器“MyLinkedServer”的提供程序“MSDASQL”指定了无效的架构或目录。
    【解决方案4】:

    我使用开放式查询来执行此任务,如下所示:

    select top 1 *
    INTO [DATABASE_TO_INSERT_INTO].[dbo].[TABLE_TO_SELECT_INTO]
    from openquery(
        [LINKED_SERVER_NAME],
        'select * from [DATABASE_ON_LINKED_SERVER].[dbo].[TABLE_TO_SELECT_FROM]'
    )
    

    上面的示例使用开放查询从链接服务器上的数据库中选择数据到您选择的数据库中。

    注意:为了参考的完整性,您可以像这样执行简单的选择:

    select top 1 * from openquery(
        [LINKED_SERVER_NAME],
        'select * from [DATABASE_ON_LINKED_SERVER].[dbo].[TABLE_TO_SELECT_FROM]'
    )
    

    【讨论】:

    • 如果字符串超过 8000 个字符(OPENQUERY 限制)怎么办?
    • 好问题 - 你可能想向社区提问,因为我不太确定 :)
    【解决方案5】:

    接受的答案对我有用。

    此外,在 MSSQLMS 中,您可以在对象资源管理器中浏览树到要查询的表。

    [服务器] -> 服务器对象 -> 链接服务器 -> [链接服务器] -> 目录 -> [数据库] -> [表]

    然后右键单击,将表格编写为,选择到,新建查询窗口

    查询将通过正确的 FROM 为您生成,您可以在 JOIN 中使用它

    【讨论】:

      【解决方案6】:

      试试Select * from openquery("aa-db-dev01",'Select * from users'),数据库连接应该在链接服务器配置中定义

      【讨论】:

        【解决方案7】:

        如果链接服务器名称为 IP 地址,则以下代码为真:

        select * from [1.2.3.4,1433\MSSQLSERVER].test.dbo.Table1
        

        只是,注意 [] 在 IP 地址部分周围。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-04
          • 2010-11-15
          • 2016-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多