想象一下场景,您正在更新一些遗留的 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 行的区域内,并且 look_up_code 有 100 个不同的值,最后,不可能有一个包含外部参照值的表proc_code_xref 中的逻辑太神秘了。_