Von 80 nach 90 – Empty SET Statement

In der Auflistung der nicht mehr unterstützten Features von SQL Server 2000 in SQL Server 2005 gibt es im Kompatibilitätslevel 80 den ominösen Eintrag „Empty SET statement (with no SET option assignments) is allowed.“ und für den Kompatibilitätslevel 90 den Eintrag „Empty SET clause is not allowed.“.

Was aber ist ein Empty SET-Statement?

Mein erster Gedanke war eine SET-Anweisung ohne weitere Zuweisung. Aber eigentlich war mir dieser Gedanke zu suspekt, denn was bringt eine SET-Anweisung ohne Zuweisung?

Erst nach etwas Recherche wurde ich fündig. Es ist in SQL Server 2000 tatsächlich möglich, in einer SP einfach mal ein SET zu plazieren – so ganz ohne Zuweisung.

Es gibt auch eine etwas seltsame Syntax, die – warum auch immer – verwendet wird:

DECLARE @CustomerId As nchar(5)
SET SELECT @CustomerId = ‚ALFKI‘
SELECT * FROM dbo.Customers WHERE CustomerId = @CustomerId

Ãœber Sinn und Unsinn der Anweisung SET SELECT möchte ich erst gar nicht nachdenken. Fakt ist, dass der SQL Server daraus 2 Anweisungen (SET und SELECT) erzeugt. Und eine SET-Anweisung ohne Zuweisung ist mit SQL Server 2005 nicht mehr möglich.