Samstag, Juni 01, 2013

SQL Server: Variablenzuweisung im Update

Jamie Thomson zeigt in seinem Blog ein SQL-Feature des SQL Servers, das gar nicht wie SQL aussieht: die Möglichkeit, eine Variable in der SET clause eines Updates zuzuweisen und zu inkrementieren. Das vorgestellte Beispiel dazu ist:

UPDATE [#DimProduct] 
   SET @MaxSurrogateKey = [ProductId] = @MaxSurrogateKey + 1
 WHERE [ProductId] IS NULL; 

Der Spalte ProductId wird also der Wert der Variablen @MaxSurrogateKey + 1 zugewiesen. Ob man damit viel anfangen kann, wäre ein anderes Thema. Interessant (und lustig) ist jedenfalls noch Adam Machanics Kommentar zum Artikel:
Jamie: "If identities were sufficient for all use cases then we wouldn't have sequences?" Wrong. If Oracle didn't have sequences then we wouldn't have sequences.
I'm not sure why you wouldn't use a ROW_NUMBER here. It would be supported, documented, and deterministic. Clever is not always a good thing.
Erinnerungswürdig ist das Feature jedenfalls insofern, als man sich ziemlich darüber wundern könnte, wenn es in freier Wildbahn begegnete.

Nachtrag 03.06.2013: mein Kollege Thomas hat mich gerade darauf hingewiesen, dass ich im Fall der Zuweisung solide daneben gelegen habe (nämlich, dass ProductId auf @MaxSurrogateKey gesetzt werden würde), was jetzt korrigiert ist.

Keine Kommentare:

Kommentar veröffentlichen