2013-07-26 2 views
5

Microsoft T-SQL 코드의 서식 지정에 대한 "종교적인"토론에서 GOTO 문이 T-SQL 구문에서 계속 사용할 수 있는지 여부를 질문했습니다. T-SQL을 사용한 13 년 동안 나는 그것을 사용할 기회가 없었으며, 그것이 존재하는지 실제로 알지 못했습니다. 문서를 간략히 검색하고 나에게 놀라움을 선사 한 후 실제로 존재합니다!어떤 경우 T-SQL GOTO 문을 사용할 수 있습니까?

GOTO 문이보다 더 나은 수행이있는 다른 고차 프로그래밍 구조가 사용되는 솔루션을 얻을 것 적어도 하나의 경우

있습니까 :

내 질문은 이것이다?

  • 암호화 알고리즘 구현

내 질문 하지 :

  • 어떻게 그렇게 할 수있는 모든 기능을 작성하지 않고 기능의 작은 비트를 사용합니까?
  • 복사/붙여 넣기없이 오류 처리 기능을 어떻게 복제합니까?
+0

내가 한 번 고토가 필요했다 질문을 해결 : http://stackoverflow.com/questions/7244617/data-grouping-according-to-relevant-values-in-sql-server/7254163#7254163 –

+0

@ t-clausen.dk 확실히 대답으로 표시해야합니다! GOTO의 재미 있고 독특한 사용법입니다. while 루프를 사용하지 않은 이유에 대한 의견이 있으십니까? –

+0

도'WHILE'로 처리했을 수 있습니다 :) –

답변

4

나는 거의 GOTO을 사용하지 않고 쉽게 사용할 수 있습니다.

많은 경우 오류 검사를 수행하는 복잡한 코드가있을 때 사용하는 것이 좋습니다. 오류가 발생할 때 어떤 조치를 취하고 싶습니다. GOTO을 사용하면 오류 검사를위한 단일 코드 블록을 정의 할 수 있습니다.

여러 가지 방법으로이 문제를 해결할 수 있지만 GOTO은 오류가 일관되게 처리되고 코드가 많은 if @Error = 0 . . . 문으로 복잡해지지 않도록하는 합리적인 옵션입니다.

+1

여기서 언급 한 내용은 실패 할 수있는 5 개의 명령문과 같은 오류를 처리하는 데 실패한 경우와 실패한 경우 하나의 오류 처리 블록 만 사용하는 것으로 가정합니다. –

+0

SQL Server의 최신 반복에서 사용할 수있는 try-catch 의미론을 사용하면이 상황이 거의 피할 수있는 것처럼 보입니다. @ 고든 리노프, 두 가지 방법을 비교해 봤어? –

+1

@ NormanH. . . 'try/catch' 블록은'GOTO'와 오류 처리를 대체하지 않습니다. 오류 처리 코드는 저장 프로 시저의 코드를 "종료"합니다. 예를 들어 오류가 발견되면 오류를 기록합니다.'try/catch' 블록은 에러를 잡아낼 수 있습니다 (그리고 처리 할 수도 있지만 일반적인 에러 처리 코드의 핵심은 반복해서 같은 코드를 반복하는 것을 피하는 것입니다). –

2

사람들은 가독성을 높이기 위해 큰 스크립트에서 몇 번 보았습니다. 때로는 읽기 쉽지만 대부분 스파게티 코드로 바뀝니다.

goto가 더 잘 수행 할 수있는 상황이 하나 있습니다. 그것의 내부에 여러 while 루프. 가장 안쪽 루프가있는 복수의 breaks 대신 goto를 한 번 사용할 수 있습니다. 그럼에도 불구하고 내 의견으로는 그다지 좋은 프로그래밍 스타일이 아닌 goto보다 훨씬 뛰어나다.

while ... 
    while ... 
    while... 
    break 
    break 
break 


while ... 
    while ... 
    while... 
    goto endloops 

endloops: 
+0

훌륭한 답변과 독특한 접근 방법입니다. 물론 스파게티 코드를 지키기 란 쉽지 않습니다.하지만 기능을 충분히 사용하더라도 일어날 수 있습니다! –