Представьте себе ситуацию: вы обновляете устаревший код 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: для целей этого примера вы также можете представить, что набор результатов находится в районе 500 тыс. строк и что существует 100 различных значений look_up_code и, наконец, что невозможно иметь таблицу со значениями внешних ссылок в виде логика в proc_code_xref слишком загадочна._