Stellen Sie sich vor, Sie aktualisieren einen Sybase-Legacy-Code und stoßen auf einen Cursor. Die gespeicherte Prozedur baut eine Ergebnismenge in einer #temporären Tabelle auf, die bereit ist, zurückgegeben zu werden, außer dass eine der Spalten nicht sehr gut lesbar ist, es ist ein alphanumerischer Code.
Was wir tun müssen, ist, die möglichen unterschiedlichen Werte dieses Codes herauszufinden, eine andere gespeicherte Prozedur aufzurufen, um einen Querverweis auf diese diskreten Werte herzustellen und dann die Ergebnismenge mit den neu entschlüsselten Werten zu aktualisieren:
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
Das mag zwar bei manchen Leuten Herzklopfen auslösen, aber es funktioniert. Meine Frage ist: Wie kann man so etwas am besten vermeiden?
Für die Zwecke dieses Beispiels können Sie sich auch vorstellen, dass die Ergebnismenge etwa 500k Zeilen umfasst und dass es 100 verschiedene Werte von look_up_code gibt und dass es schließlich nicht möglich ist, eine Tabelle mit den xref-Werten zu haben, da die Logik in proc_code_xref zu undurchsichtig ist.