SQL-Server Bug „update where $partition.PF_unbekannt“ ist behoben
So, jetzt hab ich endlich den SQL-Server 2017 auf das letzte CU5 gehoben und anschließend mal gleich geschaut, ob der von mir gemeldete – ich nenne es mal Bug und nicht Feature – behoben ist.
… und die erfreuliche Nachricht – ja!
Doch was hab ich denn da eigentlich entdeckt?
-- ich lege einen Table an -- anschliessend Select mit Einschränkung -- auf eine nicht vorhandene Partition Function drop table if exists dbo.a create table dbo.a (a int not null) select * from dbo.table a where $partition.PF_unbekannt(a) = 1
bringt und brachte wie zu erwarten war einen Fehler
aber:
update a set a = a from dbo.table a where $partition.PF_unbekannt(a) = 1
das brachte – ziemlich schnell – ich nehme mal an, schon während dem parsen ein „Command(s) completed successfully.“ – aber jetzt quittiert er ein solches (falsches) Statement mit:
Msg 208, Level 16, State 80, Line x Invalid object name '$partition.PF_unbekannt'."
… funktioniert im Übrigen jetzt auch mit 2016 SP1 CU8
Wenn sich jetzt jemand fragt, wie man so einen Fehler überhaupt findet. Zufall und Unkonzentiertheit! Ich hab ein relativ aufwändiges Script in meiner Testumgebung zusammengestellt und dabei auch eine Test Partition Function angelegt. – Allerdings hab ich das Script dann 1:1 übernommen und in der eigentlichen Umgebung durchgeführt. Das was vorher im Test schon einige Zeit gelaufen ist, war in sehr kurzer Zeit „successfully completed“. Hat mich etwas stutzig gemacht. Und als ich dann kontrolliert hab, ob wirklich alles so schnell gegangen ist, musste ich feststellen, dass gar nichts gemacht wurde.
Natürlich hab ich den Fehler sehr lange gesucht und erst als ich meinen Kollegen gefragt hab, ob er nicht einen Blick auf den Code werfen kann ist es mir aufgefallen ( – das werden sicherlich auch viele der werten LeserInnen kennen; der beste „Bug-Finder“ ist der unbeinflusste Blick einer KollegIn).
Schreibe einen Kommentar