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.
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