mais il est évident que le serveur MS Sql soutient la théorie du court-circuit, afin d'améliorer les performances en évitant un contrôle inutile,
Soutien Exemple:
SELECT 'TEST'
WHERE 1 = 'A'
SELECT 'TEST'
WHERE 1 = 1 OR 1 = 'A'
Ici, le premier exemple entraînerait en erreur ' La conversion a échoué lors de la conversion de la valeur varchar 'A' en type de données int. '
Alors que le second fonctionne facilement comme la condition 1 = 1 est évalué à TRUE et donc la deuxième condition n'a pas couru du tout.
De plus
SELECT 'TEST'
WHERE 1 = 0 OR 1 = 'A'
ici la première condition évaluerait false et donc le SGBD choisiriez la deuxième condition et encore vous obtiendrez l'erreur de conversion comme dans l'exemple ci-dessus.
NOTE: Je LA CONDITION FAUSSE ÉCRIT JUSTE RÉALISER TEMPS LA CONDITION EST ÉTABLIE court-circuité ou SI LES RÉSULTATS D'INTERROGATION EN ERREUR: l'état EXÉCUTÉ, court-circuité CONTRAIRE.
SIMPLE EXPLICATION
Tenir compte,
WHERE 1 = 1 OR 2 = 2
comme la première condition est de s'évalué à TRUE, son sens pour évaluer la deuxième condition, car son évaluation quelle que soit la valeur ne modifierait pas le résultat Du coup, c'est une bonne opportunité pour Sql Server de sauvegarder le temps d'exécution de la requête en ignorant la vérification ou l'évaluation inutile des conditions.
en cas de « OU » si la première condition est évaluée à TRUE l'ensemble de la chaîne reliée par « OR » serait considéré comme évalué à true sans évaluer les autres. Si la condition 1 est évaluée à la valeur true, toutes les conditions sont remplies jusqu'à ce que la condition N soit ignorée. Dans les mots généralisés à la détermination du premier TRUE, toutes les autres conditions liées par OR seraient ignorées.
Tenir compte de la deuxième condition
WHERE 1 = 0 AND 1 = 1
comme la première condition est de s'evalutated à FAUX son sens pour évaluer la deuxième condition, car son évaluation quelle que soit la valeur n'affecterait pas le résultat du tout, donc à nouveau C'est une bonne opportunité pour Sql Server de sauvegarder le temps d'exécution de la requête en ignorant la vérification ou l'évaluation inutile des conditions.
en cas de « ET » si la première condition est évaluée à FAUX l'ensemble de la chaîne liée à la « ET » serait considéré comme évalué à FALSE sans évaluer les autres.
condition1 AND condition2 AND ..... conditionN
si la condition1 est évaluée à FAUX, reposer toutes les conditions jusqu'à conditionN serait sautée. Dans les mots généralisés à la détermination du premier FALSE, toutes les autres conditions liées par et seraient ignorées.
DE CELUI-CI, A PROGRAMMEUR WISE DOIT TOUJOURS PROGRAMMER LA CHAÎNE DES CONDITIONS DE MANIERE QUE, MOINS CHER OU PLUS éliminons CONDITION SEAOG EVALUEE PREMIER, OU ARRANGE LA CONDITION DE MANIERE QUE PEUT PRENDRE AVANTAGE MAXIMUM DE COURT-CIRCUIT
Merci et salutations,
Rk_Hirpara
Il n'y a aucune garantie ** ** que ce soit sur la façon et quelles parties d'une condition 'de OR' sont évalués en premier (ou grand). T-SQL est ** PAS ** comme C# de cette façon. Vous ** ne pouvez pas ** compter sur un court-circuit booléen. –
'Pourquoi? 1 = 1 et @ id = 'x' est vrai' - c'est ** ou ** en fait, pas ** et **. –
Ici, dans cette valeur INSERT @tempTable (id) (1), INTO est manquant. – vijay