어떻게 사용하고 싶지 않은 경우 커서 Sybase(T-SQL)?
문제
이러한 장면을 상상해 보십시오,당신이 일부를 업데이트 레거시 Sybase 코드에 걸쳐 올 커서입니다.저장 프로시저를 구축한 결과에서 설정#임시 테이블이있는 모든 준비가되어 반환할 것을 제외하고는 하나의 열지 않는 정말 사람이 읽을 수 있는,그것은 영숫자 코드입니다.
우리에게 무엇이 필요하지 가능한 뚜렷한 값이 이 코드를 호출,다른 저장 프로시저를 이러한 은밀한 값을 업데이트 및 결과 집으로 새롭게 해독 값:
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 행하고 있다는 것을 100 고유한 값의 look_up_code 그리고 마지막으로,그것은 있을 수 없는 테이블과 외부 참조에서 값으로 논리에 proc_code_xref 이 너무 비전._
해결책
당신이 외부 참조하려면 테이블을 꺼내 커서입니다.잘 보고 100 뚜렷한 값을 조회(그리고 그들은 정체되는)그것은 간단하를 생성 중 하나를 호출하여 proc_code_xref100 시간 및 삽입하는 결과를 테이블
다른 팁
지 않는 한 당신은 기꺼이 중복되는 코드에서 외부 참조 proc,는 방법은 없을 커서를 사용하지 마십시오.
그들이 말하는 사용해야 하는 경우 커서,그 후,당신은 당신이 있어야 할 뭔가 잘못;-)여기지 않고 솔루션 cursor:
declare @lookup_code char(8)
select distinct lookup_code
into #lookup_codes
from #workinprogress
while 1=1
begin
select @lookup_code = lookup_code from #lookup_codes
if @@rowcount = 0 break
exec proc_code_xref @lookup_code @xref_code OUTPUT
delete #lookup_codes
where lookup_code = @lookup_code
end
제휴하지 않습니다 StackOverflow