T-SQL 2000:四部分表名

时间:2009-06-10 13:37:33

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

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

这样的查询将适用于来自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,对于所有表的类别,我只获取数据文件所在的网络路径,以及schema为null。

此服务器设置不正确吗?或者我正在努力做不到的事情?

3 个答案:

答案 0 :(得分:1)

来自MSDN

  

始终使用完全限定名称   使用链接上的对象   服务器。没有支持   dbo所有者的隐式解决方案   链接服务器中表的名称

您不能依赖链接服务器的“..”表示法的隐式模式名称解析。对于FoxPro'服务器',你将不得不使用数据库和模式,因为它们映射到你使用的驱动程序中的FoxPro对应物(我认为它们映射到文件夹和文件名,但我现在已超过10年没有使用ISAM文件驱动程序了。

答案 1 :(得分:0)

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

EXEC SomeLinkedServer.Database.dbo.SomeStoredProc

换句话说,只是将它们点缀在这种情况下不起作用,你必须更具体。

答案 2 :(得分:0)

实际上是:

ServerAlias.Catalog.Schema.LinkedTable

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

ServerAlias.AdventureWorks.HumanResources.Employee

ServerAlias.MyDB.dbo.MyTable