シーンを想像してみてください。レガシーSybaseコードを更新していて、カーソルに出くわします。ストアドプロシージャは、結果セットを#temporaryテーブルに構築します。このテーブルは、列の1つが人間が読める形式ではなく、英数字のコードであることを除いて、すべて返される準備ができています。
このコードの可能な個別の値を把握し、別のストアドプロシージャを呼び出してこれらの個別の値を相互参照してから、新しく解読された値で結果セットを更新する必要があります。
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行の領域にあり、look_up_codeに100の異なる値があり、最後に、外部参照値を含むテーブルを作成することはできないことも想像できます。 proc_code_xrefのロジックが難しすぎます。_