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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.