Imaginez la scène, vous mettez à jour du code Sybase existant et vous rencontrez un curseur. La procédure stockée crée un ensemble de résultats dans une table #temporary qui est prête à être retournée sauf que l'une des colonnes n'est pas très lisible par l'homme, c'est un code alphanumérique.Comment éviter d'utiliser des curseurs dans Sybase (T-SQL)?
Ce que nous devons faire, est de déterminer les possibles valeurs distinctes de ce code, appelez une autre procédure stockée pour recouper ces valeurs discrètes, puis mettre à jour le jeu de résultats avec les nouvelles valeurs déchiffrés:
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
Maintenant, alors que cela peut donner des palpitations à certains, cela fonctionne. Ma question est la suivante: comment éviter au mieux ce genre de chose?
_NB: pour les besoins de cet exemple, vous pouvez également imaginer que le jeu de résultats est dans la région de 500k lignes et qu'il y a 100 valeurs distinctes de look_up_code et enfin, qu'il n'est pas possible d'avoir une table avec les valeurs xref dans la logique dans proc_code_xref sont trop arcanes._