Выберите Запрос к двум таблицам на разных серверах баз данных.

StackOverflow https://stackoverflow.com/questions/16447

Вопрос

Я пытаюсь создать отчет, запросив две базы данных (Sybase) в классическом ASP.

Я создал 2 строки подключения:

connA для базы данныхA
connB для базы данныхB

Обе базы данных присутствуют на одном сервере (не знаю, имеет ли это значение)

Запросы:

q1 = SELECT column1 INTO #temp FROM databaseA..table1 WHERE xyz="A"

q2 = SELECT columnA,columnB,...,columnZ FROM table2 a #temp b WHERE b.column1=a.columnB

с последующим:

response.Write(rstsql) <br>
set rstSQL = CreateObject("ADODB.Recordset")<br>
rstSQL.Open q1, connA<br>
rstSQL.Open q2, connB

Когда я пытаюсь открыть эту страницу в браузере, я получаю сообщение об ошибке:

Поставщик Microsoft OLE DB для драйверов ODBC, ошибка «80040e37»

[DataDirect][Драйвер протокола ODBC Sybase Wire][SQL Server]#temp не найден.Укажите Owner.objectname или используйте sp_help, чтобы проверить, существует ли объект (sp_help может выдать много выходных данных).

Может ли кто-нибудь помочь мне понять, в чем проблема, и помочь мне ее исправить?

Спасибо.

Это было полезно?

Решение

Похоже, что в обоих запросах вы пытаетесь вставить в #temp.#temp находится в одной из баз данных (для аргументов — в базе данныхA).Итак, когда вы пытаетесь вставить в #temp из базы данныхB, он сообщает, что она не существует.

Попробуйте изменить его с В #temp От к В база данныхA.dbo.#temp От в обоих заявлениях.

Также убедитесь, что строки подключения имеют разрешения на другую БД, иначе это не сработает.

Обновлять:что касается временной таблицы, выходящей за рамки - если у вас есть одна строка подключения, имеющая разрешения для обеих баз данных, вы можете использовать ее для обоих запросов (при сохранении соединения).При запросе таблицы в другой базе данных обязательно используйте формат [DBName].[Owner].[TableName] при обращении к таблице.

Другие советы

Ваша таблица температуры вышла из области, она только «жива» во время первого соединения и не будет доступна во 2 -м соединении, просто переместите все в одном блоке кода и выполните его внутри одной контии

temp выходит за рамки в q2.

Всю вашу работу можно выполнить одним запросом:


SELECT a.columnA, a.columnB,..., a.columnZ
FROM table2 a
INNER JOIN (SELECT databaseA..table1.column1 
            FROM databaseA..table1
            WHERE databaseA..table1.xyz = 'A') b
  ON a.columnB = b.column1
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top