Выберите Запрос к двум таблицам на разных серверах баз данных.
-
08-06-2019 - |
Вопрос
Я пытаюсь создать отчет, запросив две базы данных (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