Выберите Запрос на 2 таблицы, на разных серверах баз данных. - PullRequest
4 голосов
/ 19 августа 2008

Я пытаюсь создать отчет, запрашивая 2 базы данных (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 Protocol] [SQL Server] # элемент не найден. Укажите owner.objectname или используйте sp_help, чтобы проверить, существует ли объект (sp_help может выдавать много выходных данных)

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

Спасибо.

Ответы [ 3 ]

4 голосов
/ 19 августа 2008

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

Попробуйте изменить его с На # temp С на На databaseA.dbo. # Temp С в обоих операторах.

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

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

4 голосов
/ 19 августа 2008

ваша временная таблица находится вне области видимости, она «жива» только при первом подключении и не будет доступна во втором Просто переместите все это в один блок кода и выполните его внутри одного соединения

2 голосов
/ 19 августа 2008

температура вне области в 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
...