2014-01-23 5 views
3

Мне удалось создать псевдоним для связанного сервера, используя this method. При связывании сервера я указал каталог по умолчанию, поэтому теперь я могу выполнить удаленный SP, пропустив схему и имя базы данных, например. это работает:SELECT из каталога по умолчанию связанного сервера

EXEC REMOTE_SERVER_ALIAS...REMOTE_STORED_PROCEDURE 

Но по какой-то причине я не могу использовать тот же подход для простой выбор:

SELECT * FROM REMOTE_SERVER_ALIAS...REMOTE_TABLE 

Попытка выполнить это бросает ошибку:

An invalid schema or catalog was specified

Любая идея, как сделать это работает?

P.S. Я знаю о OPENQUERY подходе, а не использовать его из-за своих ограничений

+0

Я думаю, что разные версии SQL Server анализируют это по-разному, поэтому наилучшим вариантом является использование полного имени, хотя его немного больше, чтобы печатать. – idstam

+1

@idstam Проблема в том, что мы создаем универсальный скрипт, который должен запускаться на сервере с неизвестным именем и БД с неизвестным именем (мы знаем, что БД будет иметь SP и таблицы с известными именами). Таким образом, идея заключалась в создании сервера с псевдонимом с каталогом по умолчанию, поэтому сценарий должен просто указывать псевдоним сервера и имена таблиц/SPs. –

ответ

1

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

Select * From [Remote_Server_Alias].[Database_Name].[Schema].[Table_Name] 

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

+0

Спасибо за ответ, но я уже знаю, буду ли я указывать все 4 части - он работает. Какие ошибки у меня есть - при вызове удаленного SP - я могу либо указать все 4 части * или * пропустить схему и имя БД - она ​​все равно будет работать. Вопрос состоял в том, как сделать ту же работу для таблиц. Или - если это невозможно - * почему * он работает для SP и не работает для таблиц –

+0

Ну, хранимые процедуры не имеют связанной с ними схемы, поэтому для них это меньше. Хранимые процедуры хранятся на уровне базы данных, поэтому использование каталога по умолчанию устраняет необходимость указания базы данных. Мой первый наставник SQL сказал, что все части справа от самого глубокого уровня, который вы указали, требуются. Поэтому, если вы укажете сервер, вы должны указать имя базы данных, схему и имя таблицы. Если вы укажете базу данных, вам нужно указать схему и таблицу. Выполняя быстрый поиск, я все равно не могу найти этого. Надеюсь, кто-то еще знает больше. –

Смежные вопросы