GOTO and T-SQL

  • no equivalent to Visual Basic's RETURN statement to return control to the statement after the one that issued the GOTO

    I think you're actually thinking of the GOSUB statement, which we have in T-SQL as EXEC.

    While I haven't personally used GOTO in a very long time either, I can still see a restricted use for it, for the purpose of jumping forward in code (but never backward). Just my 2c but I don't always want every stored proc I write to be one huge TRY..CATCH block.

    I find it interesting that Microsoft themselves still use GOTO (2008 R2 at least, haven't tried 2012) when scripting out a SQL Agent job from SSMS.

  • GOTO is not as evil as it is painted today. When Dijkstra wrote his paper - which not many today's programmers have read -, real programmers programmed in Assembler and GOTO was one of the flavors of the 'branch' instruction. The recommended error handling construct looked like this:

    * coming back from a Supervisor call; return code is in register 1

    * return codes were multiples of 4

    B *+4(1) *+4 is the address of the following instruction

    B success you get here if the return code was 0

    B error4 you get here if the return code was 4

    B error8 etc.

    Imagine debugging a program with several 'branch tables' like this. Some Supervisor calls might return over 20 different errors.

    On the other hand, some GOTOs were actually encouraged; e.g., BXLE or Branch on Index Lower or Equal, which was the best way to do a WHILE loop.

  • Blanket prohibitions are generally a bad idea in any field. All processors have Jump instructions, which are low-level GOTOs, and high-level languages compile or interpret down to that, so your actual code is full of GOTOs anyway, now matter how fanatic you are about structure. They're like any tool - they can be misused, and they can be the best tool for the job. People who automatically just repeat the 'GOTO is BAD' mantra are sheep - I prefer to think for myself.

    I also wish T-SQL had a GoSub statement - would have been perfect for a job just today. Instead, I wound up with a couple of GOTOs and some awkward tests.

  • A lot of ideas that are painted black are due to mis-interpretations.

    Take Hungarian notation. Simonyi suggested its use to signal intent but people mis-interpretted this to signify type. Thats why we get tables beginning with tbl; due to that mis-interpretation.

    You could argue that SQL2005/2008 schemas and namespaces are actually closer to expressing Simonyi's original idea.

  • Revenant (12/22/2011)


    GOTO is not as evil as it is painted today. When Dijkstra wrote his paper - which not many today's programmers have read -, real programmers programmed in Assembler and GOTO was one of the flavors of the 'branch' instruction. The recommended error handling construct looked like this:

    * coming back from a Supervisor call; return code is in register 1

    * return codes were multiples of 4

    B *+4(1) *+4 is the address of the following instruction

    B success you get here if the return code was 0

    B error4 you get here if the return code was 4

    B error8 etc.

    Imagine debugging a program with several 'branch tables' like this. Some Supervisor calls might return over 20 different errors.

    On the other hand, some GOTOs were actually encouraged; e.g., BXLE or Branch on Index Lower or Equal, which was the best way to do a WHILE loop.

    Don't tell me your one of those that thinks assembler is real programing? I bet you don't from the way you write! Thou it's not entirely uncommon. Those goofs that likes to invent the wheel all over again and again..

    No I still stand by that GOTOs in 99% of all cases are written because the programmer did not know better and that was how he did it 20 years ago.

  • IceDread (12/22/2011)


    . . . Don't tell me your one of those that thinks assembler is real programing? I bet you don't from the way you write! . . .

    No, I do not, not any longer; however, there was time when the only REAL programming was in Assembler. Those were the times when an hour of IBM /360 was $300, in 1970 dollars, and that was about programmer's monthly salary. COBOL compile could take say 15 minutes, assembly of ~3,000 lines of code less than a minute.

    Pick your heroes. Retroactively. 😉

Viewing 6 posts - 16 through 20 (of 20 total)

You must be logged in to reply to this topic. Login to reply