Сведения о вопросе

Kimsanov

13:33, 22nd August, 2020

Теги

sql   asp-classic   vbscript   sybase    

Выберите запрос по 2 таблицам, на разных серверах баз данных

Просмотров: 386   Ответов: 3

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

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


connA для databaseA
connB для databaseB

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


Запросы:

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

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

Спасибо.



  Сведения об ответе

repe

21:06, 1st October, 2020

ваша временная таблица находится вне области видимости, она является только 'alive' во время первого соединения и не будет доступна во втором соединении Просто переместите все это в один блок кода и выполните его внутри одного соединения


  Сведения об ответе

lool

19:37, 27th August, 2020

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

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

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

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


  Сведения об ответе

#hash

22:28, 29th August, 2020

темп выходит за рамки в 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

Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться