T-SQL und das Semikolon als Befehlsende

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