T-SQL 2000: имя таблицы из четырех частей - PullRequest
0 голосов
/ 10 июня 2009

Я обычно не работаю со связанными серверами, и поэтому я не уверен, что я делаю здесь неправильно.

Такой запрос будет работать на связанном сервере foxpro из SQL 2000:

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 на связанном сервере, для категории для всех таблиц я просто получаю сетевой путь к файлам данных и схема является нулевой.

Неправильно ли настроен этот сервер? Или то, что я пытаюсь сделать, невозможно?

Ответы [ 3 ]

1 голос
/ 10 июня 2009

С MSDN :

Всегда используйте полные имена, когда работа с объектами на связанных сервера. Там нет поддержки для неявное разрешение владельцу dbo имя для таблиц в связанных серверах

Нельзя полагаться на неявное разрешение имен схемы в обозначении «..» для связанных серверов. Для «сервера» FoxPro вам придется использовать базу данных и схему, поскольку они сопоставляются со своими аналогами FoxPro в используемом вами драйвере (я думаю они сопоставляют с именем папки и файла, но не использую файловый драйвер ISAM уже более 10 лет).

0 голосов
/ 10 июня 2009

Это на самом деле:

ServerAlias.Catalog.Schema.LinkedTable

Каталог - это база данных, к которой вы обращаетесь на связанном сервере, а каталог - это каталог удаленной таблицы. Таким образом, правильное имя из четырех частей выглядело бы так:

ServerAlias.AdventureWorks.HumanResources.Employee

или

ServerAlias.MyDB.dbo.MyTable

0 голосов
/ 10 июня 2009

Я думаю, что вам необходимо четко указать ресурсы в связанной серверной части запроса, например:

EXEC SomeLinkedServer.Database.dbo.SomeStoredProc

Другими словами, простое расставление точек в этом случае не работает, вам нужно быть более конкретным.

...