Steffen über SQL Server und Business Intelligence

Steffen Krause - Microsoft Technical Evangelist

T-SQL und das Semikolon als Befehlsende

T-SQL und das Semikolon als Befehlsende

  • Comments 3
  • Likes

In der Liste der "Deprecated Features" in SQL Server 2008 findet sich ein Eintrag, der wohl jeden erfahrenen T-SQL Programmierer aufhorchen lässt:

Category: Transact-SQL

Deprecated Feature: Not ending Transact-SQL statements with a semicolon.

Replacement: End Transact-SQL statements with a semicolon ( ; ).

Das heißt, in Zukunft muss jedes T-SQL Statement mit einem Semikolon abgeschlossen werden. Das bedeutet, dass irgendwann in Zukunft 100% aller SQL Skripte geändert werden müssen. Zur Beruhigung: Diese Zukunft, in der SQL Statements ohne Semikolon ungültig sind ist aus Kompatibilitätsgründen noch weit weg. Aber sie wird kommen. Erste Anzeichen gibt es schon, so muss ein MERGE-Statement schon in SQL 2008 mit einem Semikolon beendet werden.

Warum nun aber diese Forderung?

Grund 1: Der ANSI-SQL-92 Standard

Der sagt schlicht, dass ein SQL Statement mit einem Semikolon abzuschließen ist. In BNF sieht das so aus:

direct_sql_stmt 
      ::= 
      directly_exec_stmt ";" 

Grund 2: Uneindeutigkeiten und weniger Empfindlichkeit gegen Schreibfehler:

select 1sp_who

go

select 1 sp_who

go

select 1; sp_who

Grund 3: Klarere, lesbarere Syntax

Ich werde daher langsam damit anfangen, meine Skripte mit Semikolons zu versehen.

Gruß,
Steffen

Comments
  • Hallo Steffen,

    Wie sieht es mit dem "GO" Befehl aus?

    Wird dieser auch als "Deprecated Feature" gekennzeichnet?

    Gruß

    Christian

    Antwort: Nein. GO schließt ja auch einen Batch ab, nicht einen Befehl

    Gruß,
    Steffen

  • War bei einigen Befehlen, insbesondere im Bereich Service Broker, sowieso schon Pflicht. Schön das wir endlich ein konsistentes Verhalten bekommen.

    Ich habs mir angewöhnt, das Semikolon an den Anfang eines Befehls zu schreiben ... das läuft wohl in Zukunft unter schlechtem Stil :o)

  • Hallo,

    in dem genannten Artikel zum SQL Server 2008 steht "Features Not Supported in the Next Version of SQL Server". Ist damit gemeint, dass diese Liste im 2008er noch geht, aber in dessen Nachfolger ("next") nicht?

    Viele Grüße

    Thomas

    Antwort: Nein, es steht in dem Artikel unter "Features Not Supported in a Future Version of SQL Server". Das heißt, es wird irgendwann einmal, aber nicht in der nächsten Version entfernt.

    Gruß,
    Steffen

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment