Ermutigt durch Christoph schickt ich eine Beschreibung des Problems mit den nicht-deterministischen Funktionen an Craig Freedman (zum Glück privat, sonst wäre meine Mail vermutlich nie angekommen). Er antwortete sehr prompt und schrieb mir, dass er das Problem dem für den Teil zuständigen Entwickler gezeigt habe. Hier die Antwort des Entwicklers, die Craig mir weiterleitete:
In general, SQL Server does not guarantee the timing of execution of scalar operators. For non-deterministic scalars (built-in and user-defined), that means the timing semantics (number of times executed and when) is not defined. In addition, it may change from one plan to another, or from one release to the next.
Er selber fügte noch als persönlichen Kommentar an, dass er die Lösung mittels temporärer Tabelle favorisiere:
Unfortunately, I am not aware of (and was unable to identify) a better workaround than simply storing the GUIDs in a temp table before joining with the original table.
Er schlug auch vor, dass ich das Kundenfeedback unter http://connect.microsoft.com melde, obwohl ich da möglicherweise die gleiche Antwort bekomme. Ich stimme ihm in all diesen Punkten zu. Es lohnt sich sicher das dort einzukippen, weil es dann mal in einem Forum öffentlich diskutiert wird. Mal sehen, ob ich morgen dazu komme…
Hallo Thomas,
schön das du eine Antwort bekommen hast 🙂
"In general, SQL Server does not guarantee the timing of execution of scalar operators. For non-deterministic scalars (built-in and user-defined), that means the timing semantics (number of times executed and when) is not defined. In addition, it may change from one plan to another, or from one release to the next."
Am bedenklichsten finden ich den letzten Satz. Da wird dem Begriff non-deterministic aber alle Ehre gemacht…
Vg
Christoph
Hallo,
ja. Ich habe in unserer Firma die Empfehlung publiziert nicht-deterministische Funktionen nur noch in trivialen SQL-Befehlen zu verwenden. Das werde ich bei Gelegenheit in die Richtlinien einbauen.
Dennoch werde ich es bei Gelegenheit ins Connect-Forum reinstellen. Vielleicht führt das ja doch zu einer Diskussion und Reaktion bei MS. 😉
Viele Grüße, Thomas