【问题标题】:T-SQL 2000: Four part table nameT-SQL 2000:四部分表名
【发布时间】:2010-11-01 19:38:19
【问题描述】:

我通常不使用链接服务器,所以我不确定我在这里做错了什么。

这样的查询将适用于从 sql 2000 链接的 foxpro 服务器:

EXEC('Select * from openquery(linkedServer, ''select * from linkedTable'')')

但是,通过在互联网上的研究,这样的事情也应该有效:

Select * from linkedserver...linkedtable

但我收到此错误:

Server: Msg 7313, Level 16, State 1, Line 1
Invalid schema or catalog specified for provider 'MSDASQL'.
OLE DB error trace [Non-interface error:  Invalid schema or catalog specified for the provider.].

我意识到它应该是 ServerAlias.Category.Schema.TableName,但如果我在链接服务器上运行 sp_tables_ex,对于所有表的类别,我只需获取数据文件所在的网络路径,以及架构为空。

此服务器设置是否不正确?还是我试图做的事情是不可能的?

【问题讨论】:

    标签: tsql sql-server-2000 linked-server


    【解决方案1】:

    来自MSDN

    在以下情况下始终使用完全限定名称 处理链接上的对象 服务器。没有支持 对 dbo 所有者的隐式解决 链接服务器中表的名称

    对于链接服务器,您不能依赖“..”符号的隐式模式名称解析。对于 FoxPro“服务器”,您将不得不使用数据库和架构,因为它们映射到您使用的驱动程序中的 FoxPro 对应项(我认为它们映射到文件夹和文件名,但我已经有 10 多年没有使用 ISAM 文件驱动程序了)。

    【讨论】:

      【解决方案2】:

      我认为您需要在查询的链接服务器部分明确说明资源,例如:

      EXEC SomeLinkedServer.Database.dbo.SomeStoredProc
      

      换句话说,在这种情况下,仅将它们点出来是行不通的,您必须更具体。

      【讨论】:

        【解决方案3】:

        其实是:

        ServerAlias.Catalog.Schema.LinkedTable

        Catalog 是您在链接服务器上查询的数据库,catalog 是远程表的目录。所以一个有效的四部分名称看起来像这样

        ServerAlias.AdventureWorks.HumanResources.Employee

        ServerAlias.MyDB.dbo.MyTable

        【讨论】:

        • 有没有办法可以确定这两个中间部分是什么? sp_linkedservers 将“SRV_CAT”显示为空,并且 sp_tables_ex 也将“TABLE_SCHEM”显示为空
        • 看看这里 - 这个线程中的 OP 遇到了与 FoxPro 类似的问题:sqlnewsgroups.net/group/microsoft.public.sqlserver.server/… 让我看看它是如何工作的。
        猜你喜欢
        • 2010-12-22
        • 1970-01-01
        • 2012-09-14
        • 1970-01-01
        • 2014-12-19
        • 2013-12-18
        • 2019-05-02
        • 2010-10-24
        • 2013-12-06
        相关资源
        最近更新 更多