La comparaison de deux variables dans SQL
Permet de dire que vous avez le code suivant:
DECLARE @A INT = 1,
@B INT = NULL;
IF (@B != @A)
SELECT 1;
ELSE IF (@B = @A)
SELECT 2;
ELSE
SELECT 3;
Comme vous pouvez le voir variable @A
est égal à '1' pour vous et variable @B
n'est certainement pas. Je suis l'exécution de cette partie de code dans Microsoft SQL Server Management Studio 2014 et je suis de '3' comme résultat. Cela signifie que @A
n'est pas le même que @B
, mais c'est pas non plus différent que @B
. Comment est-ce même possible? Ce qui me manque ici?
Il vous manque une compréhension de
Une autre bonne/est cool de connaître et de comprendre au sujet de la comparaison avec
La seule façon de comparer la valeur NULL est avec le
Merci, je suppose que j'ai raté quelques trucs de base. =/
NULL
valeurs. Presque toute comparaison avec NULL
retourne NULL
, qui est considérée comme fausse. Cette question est abordée à la fois dans le matériel d'apprentissage sur SQL, de la documentation, et dans d'autres Débordement de Pile questions.Une autre bonne/est cool de connaître et de comprendre au sujet de la comparaison avec
NULL
valeurs peuvent être trouvées dans ce génial réponse ici.La seule façon de comparer la valeur NULL est avec le
IS NULL
/IS NOT NULL
opérateursMerci, je suppose que j'ai raté quelques trucs de base. =/
OriginalL'auteur msmolcic | 2015-08-12
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas comparer null avec d'autres valeurs. Vous avez besoin de gérer séparément les valeurs null.
Donc,cela fonctionne
J'ai expliqué pourquoi son code ne fonctionne pas. ma réponse est plus spécifique à ses données d'entrée.
OriginalL'auteur sateesh
La version correcte devrait être:
parce que NULLE comparaison doivent toujours être manipulés séparément dans SQL.
J'ai inversé la
!=
et la=
cas, parce que, tsql ne dispose pas d'une logique opérateur XOR, parce que je veux considérer comme NULLE égale à NULL.Remarque que le
SELECT 3
ne pourra jamais se passer maintenant.OriginalL'auteur xanatos
J'ai toujours utiliser la fonction ISNULL. Je pense que la fonction ISNULL vous permet d'économiser de l'écriture de scripts plus.
ISNULL()
. @A = 1, @B = NULL renvoieSELECT 1
, tandis que @A = 0, @B = NULL renvoieSELECT 3
.OriginalL'auteur Arif YILMAZ
Vous pouvez comparer facilement les variables à l'aide de
INTERSECT
comme il estNULL
sensibles:Aussi, lorsque vous avez besoin de faire de telles comparaisons dans des requêtes complexes, ce qui pourrait améliorer les performances qu'il permet l'utilisation d'index.
OriginalL'auteur gotqn