Результаты поиска
Как избежать использования курсоров в Sybase (T-SQL)?
Представьте себе сцену, вы обновляете какой-то устаревший код Sybase и натыкаетесь на курсор. Хранимая процедура создает результирующий набор в таблице #temporary, которая полностью готова к возвращению, за исключением того, что один из столбцов не очень удобочитаем, это буквенно-цифровой код.
Что нам нужно сделать, так это выяснить возможные различные значения этого кода, вызвать другую хранимую процедуру для перекрестной ссылки на эти дискретные значения, а затем обновить результирующий набор новыми расшифрованными значениями:
declare c_lookup_codes for
select distinct lookup_code
from #workinprogress
while(1=1)
begin
fetch c_lookup_codes into @lookup_code
if @@sqlstatus<>0
begin
break
end
exec proc_code_xref @lookup_code @xref_code OUTPUT
update #workinprogress
set xref = @xref_code
where lookup_code = @lookup_code
end
Итак, хотя это может вызвать у некоторых людей учащенное сердцебиение, это действительно работает. Мой вопрос в том, как лучше всего избежать такого рода вещей?
_NB: для целей этого примера вы также можете представить, что результирующий набор находится в области 500k строк и что существует 100 различных значений look_up_code и, наконец, что невозможно иметь таблицу со значениями внешней ссылки, так как логика в proc_code_xref слишком arcane._
Выберите запрос по 2 таблицам, на разных серверах баз данных
Я пытаюсь создать отчет, запросив 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 может выдавать много выходных данных).
Может ли кто-нибудь помочь мне понять, в чем проблема, и помочь мне ее решить?
Спасибо.