Was bedeutet es, von "Nicht-deterministische benutzerdefinierte Funktion kann verwendet werden, in einer deterministischen Art und Weise"?
Laut MSDN SQL BOL (Books Online) Seite Deterministische und nicht deterministische Funktionen, nicht-deterministische Funktionen verwendet werden können "in einer deterministischen Art und Weise"
Folgende Funktionen sind nicht immer deterministisch, kann aber verwendet werden, indizierten sichten und Indizes für berechnete Spalten, wenn Sie angegeben werden, in einer deterministischen Art und Weise.
Was bedeutet es, durch nicht-deterministische Funktionen können verwendet werden, in einer deterministischen Art und Weise?
Kann mir jemand veranschaulichen, wie getan werden kann? und wo würden Sie tun?
InformationsquelleAutor Sung M. Kim | 2009-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
den BOL ist eigentlich festgelegt:
und dann unten es Staaten, welche Bedingungen erfüllt sein müssen, um Sie deterministisch.
E. g.
In anderen Worten, müssen Sie erfüllen diese Bedingung, Sie in deterministische Weise
Beispielsweise wenn Sie eine Tabelle erstellen
können Sie anwenden-index auf castIntToVarchar aber wenn Sie versuchen, hinzufügen, index, castDateTimeToInt oder castIntToDateTime Sie die folgende Fehlermeldung erhalten:
Spalte 'castDateTimeToInt'(castIntToDateTime) in der Tabelle 'dbo.deterministicTest' kann nicht verwendet werden, in einem index oder einer Statistik oder als partitionsschlüssel, weil es nicht deterministisch ist.
Also das dateTime kann nicht verwendet werden, weder als Quelle noch das Ziel-format der CONVERT-Funktion, wenn Sie bleiben wollen deterministische
Meister, CAST(Feld AS INT) deterministisch ist, ist die Ausgabe richtet sich ausschließlich nach dem Eingang. Jedoch, CAST(Feld AS DATETIME) ist nicht-deterministisch, der Ausgang hängt nicht nur vom Eingang, sondern auch potenziell auf externe Effekte, wie der server konfiguriert ist, um zwei-stellige Jahre.
auch wenn das "Feld" ist vom Typ dateTime, es wird nicht-deterministisch als auch
Wahr. Ich meinte, dass in meinem Kommentar, aber lief aus Zeichen!
InformationsquelleAutor kristof
Dass eine Funktion deterministisch bedeutet, dass es garantiert immer wieder den gleichen Ausgangswert für die gleichen input-Argumente.
Verwendung einer nicht-deterministischen Funktion in einer deterministischen Art und Weise, ich nehme an, bedeutet, dass Sie sicherstellen, dass das Spektrum der Argumente übergeben Sie der Funktion ist, so dass der return-Wert wird die deterministische, dh. halt nur opon diese Argumente.
Was bedeutet dies in der Praxis hängt davon ab, was die Funktion tut und auf welche Weise es ist nicht-deterministisch.
Tatsächlich BOL-Liste alle Funktionen, die nicht immer deterministisch, und legt fest, Wann Sie sind und nicht deterministisch sind. Andere Funktionen sind entweder immer deterministisch oder immer nicht-deterministisch
kristof, das ist gut zu wissen.
InformationsquelleAutor Tor Haugen
Beispiel:
versus:
Hinweis: diese verwendet die MSDN-Artikel die definition des Wort "deterministisch"
InformationsquelleAutor
BOL Definitionen Lesen sollte:
"Deterministische Funktionen stets dasselbe Ergebnis zurück, auf der gleichen Zeile, jeder Zeit aufgerufen werden Sie mit einem bestimmten set von Eingabewerten (Zeile) und erhält den gleichen Status der Datenbank.
In anderen Worten deterministische Funktionen immer das gleiche Ergebnis zurückgeben auf einen bestimmten festen Wert aus Ihrer Domäne (in diesem Fall Domäne ist eine Zeile).
Nicht deterministische Funktionen können unterschiedliche Ergebnisse zurückgeben, jedes mal, wenn Sie aufgerufen werden, mit einem bestimmten Satz von Eingabewerten (Zeile) auch wenn den Zustand der Datenbank, auf die zugegriffen wird, bleibt der gleiche.
In diesem Fall nicht deterministische Funktionen
a) unterschiedliche Werte Zurückgeben, jedes mal, wenn Sie aufgerufen.
b) in Abhängigkeit der Werte, die außerhalb der Zeile, die Sie angewendet.
Beispiele der Gruppe a): NEWID(), GETDATE(), GETUTDATE(), RAND() ohne Samen angegeben.
Beispiele der Gruppe b): GET_TRANSMISSION_STATUS(), LAG(), RANG(), DENSE_RANK(), ROW_NUMBER(), NTILE(), SUMME (), wenn angegeben mit den OVER-und ORDER BY-Klauseln.
"
Bitte beachten Sie, dass einige Autoren verwenden unterschiedliche definition von deterministischen Funktionen das kann zu Verwirrung führen.
InformationsquelleAutor Pavel Nefyodov