Que faut-il dire par “Non-déterministe fonctions Définies par l'Utilisateur peuvent être utilisés de manière déterministe”?
Selon MSDN SQL BOL (documentation en Ligne) page sur Fonctions déterministes et non déterministes, non-déterministe fonctions peuvent être utilisées "de manière déterministe"
Les fonctions suivantes ne sont pas toujours déterministe, mais peut être utilisé dans les vues indexées ou des index sur des colonnes calculées lorsqu'elles sont spécifiées de manière déterministe.
Que signifie par des non-déterministe fonctions peuvent être utilisées de manière déterministe?
Quelqu'un peut-il illustrer comment qui peut être fait? et où vous le feriez?
OriginalL'auteur Sung M. Kim | 2009-04-02
Vous devez vous connecter pour publier un commentaire.
le BOL effectivement états:
puis en dessous il indique quelles conditions doivent être réunies afin de les rendre déterministe.
E. g.
En d'autres termes, vous devez répondre à ces condition de les utiliser dans déterministe manière
Par exemple, lorsque vous créez une table
vous pouvez appliquer de l'index sur castIntToVarchar mais si vous essayez d'ajouter un index à castDateTimeToInt ou castIntToDateTime, vous obtiendrez l'erreur suivante:
La colonne "castDateTimeToInt'(castIntToDateTime) dans la table " dbo.deterministicTest' ne peut pas être utilisée dans un index, de statistiques ou d'une clé de partition, car il est non-déterministe.
Si la date ne peut pas être utilisée ni comme une source, ni le format de la cible de la fonction de conversion si vous voulez rester déterministe
Meister, CAST(champ de type INT) est déterministe, la sortie est déterminée uniquement par l'entrée. Cependant, la distribution(champ DATETIME) est non-déterministe, la sortie ne dépend pas seulement de l'entrée, mais aussi potentiellement sur des externalités comme la façon dont le serveur est configuré pour gérer les années à deux chiffres.
aussi, si le champ est de type dateTime, il sera non-déterministe ainsi
Vrai. Je voulais l'inclure dans mon commentaire, mais a manqué de personnages!
OriginalL'auteur kristof
Qu'une fonction déterministe signifie qu'il est garanti toujours à retourner la même valeur de sortie pour les mêmes arguments d'entrée.
À l'aide d'un non-déterministe de la fonction de manière déterministe je suppose signifie que vous assurer que l'éventail des arguments que vous passer à la fonction est telle que la valeur de retour sera déterministe, c'est à dire. dépendante que de l'opon ces arguments.
Ce que cela implique dans la pratique dépend de ce que la fonction ne et de quelle manière il est non-déterministe.
En fait BOL liste de toutes les fonctions qui ne sont pas toujours déterministe, et indique le moment où ils sont et ne sont pas déterministes. D'autres fonctions sont toujours déterministe ou toujours non-déterministe
kristof, c'est bon à savoir.
OriginalL'auteur Tor Haugen
Un exemple:
contre:
Remarque il utilise l'article de MSDN à la définition du mot "déterministe"
OriginalL'auteur
BOL définitions devraient lire:
”Les fonctions déterministes retourne toujours le même résultat sur la même ligne en tout temps, ils sont appelés à un ensemble spécifique de valeurs d'entrée (ligne) et donné le même état de la base de données.
En d'autres termes les fonctions déterministes retourne toujours le même résultat sur une valeur fixe de leur domaine (dans ce cas domaine est une ligne).
Non déterministe fonctions peuvent renvoyer des résultats différents à chaque fois qu'ils sont appelés à un ensemble spécifique de valeurs d'entrée (ligne), même si la base de données de l'état de l'accès reste le même.
Dans ce cas des fonctions non déterministes
a) le Retour des valeurs différentes à chaque fois, ils ont appelé.
b) Dépendent des valeurs en dehors de la ligne qu'ils ont appliqué sur.
Exemples du groupe a): NEWID(), GETDATE(), GETUTDATE(), RAND() avec pas de postérité spécifié.
Exemples du groupe b): GET_TRANSMISSION_STATUS(), GAL(), RANK(), DENSE_RANK(), la fonction ROW_NUMBER(), NTILE(), SUM() lorsqu'il est spécifié avec les PLUS et les clauses ORDER BY.
”
Veuillez noter que certains auteurs utilisent différentes définition de fonctions déterministes qui peut conduire à la confusion.
OriginalL'auteur Pavel Nefyodov