Имя объекта <TableName> содержит больше максимального числа префиксов. Максимум 2
Я пытаюсь получить записи из двух таблиц на разных серверах с помощью одного запроса. Я использую приведенный ниже формат в запросе выбора.... но все, что я получаю, это ошибка выше.
Есть ли способ вытащить записи с двух серверов в одном запросе, как
select * from server1.db1.schema1.table1 s1,server2.db2.schema2.table2 s2 where s1.col1 = s2.col2
Я использую Sybase и Rapidsql.
РЕДАКТИРОВАТЬ: я использую Sybase Adaptive Server Enterprise 15.5 и быстрый SQL 8.1.0
1 ответ
Причина, по которой вы получаете синтаксическую ошибку, заключается в том, что Sybase ASE не может ссылаться на внешние базы данных и таблицы таким образом для запросов. Запросы поддерживают только синтаксис DATABASE.OWNER.TABLE
или же DATABASE..TABLE
,
С помощью Sybase ASE вы можете выполнять запросы к нескольким серверам с помощью служб интеграции компонентов (CIS). Это позволяет вам настроить прокси-таблицы или прокси-базы данных, которые извлекают данные, находящиеся на удаленном сервере. Удаленный сервер необходимо добавить на локальный сервер, используя sp_addserver
и должен быть либо в interfaces / sql.ini, либо доступен через LDAP.
Оттуда вы должны добавить регистрационную информацию для удаленного сервера, используя sp_addexternalogin
Затем вам нужно будет подключиться к удаленному серверу и определить ваши прокси-таблицы или прокси-базы данных.
После этого вы можете рассматривать прокси-таблицы / базы данных как локальные для вашей системы для запросов, если локальные серверы подключены к удаленному серверу.
Я настоятельно рекомендую ознакомиться с документацией CIS, указанной выше, так как есть несколько руководств по ее настройке.