7
votes

Query SQL Server avec In (NULL) ne fonctionne pas

Lorsque je définis un "type de table défini par l'utilisateur", comme: xxx

i place 0 et null dans cette variable de table. Ensuite, je fais cette requête: xxx

obtiendra seulement item = 0 pas item est null < p> Mettre simplement: Sélectionnez quelque chose à partir de tire où l'élément de (0, null) ne fonctionne pas (pas d'erreur bien que) Il doit être sélectionner quelque chose à partir de tire où l'élément = 0 ou l'élément est null

donc, ma question est, si j'aime utiliser Type de table défini par l'utilisateur < / Fort>, mais j'ai aussi besoin d'utiliser la valeur null. Comment puis-je exécuter la requête correctement pour obtenir le résultat include Null Article.

Merci (BTW, j'utilise MS SQL Server 2008 R2)


0 commentaires

3 Réponses :


5
votes

NULL n'est pas égal à NULL dans SQL Server (et la plupart des autres systèmes de gestion de base de données). Vous auriez besoin de faire une regroupement sur la colonne jointe et d'utiliser une valeur sentinelle pour représenter NULLS.


0 commentaires

3
votes

Il y a une triche Utilisation isnull code> sur l'élément étant comparé.

EG P>

SELECT something 
FROM theTable 
WHERE ISNULL(item,0) IN (0)


0 commentaires

5
votes

Les seules opérations de comparaison valides avec null sont est null ou n'est pas null , d'autres personnes retournent toujours false (réellement - inconnue, voir Le commentaire de @ damien_the_unbeliever)

Alors, essayez ce qui suit xxx


4 commentaires

Bonne idée, alors au lieu de créer Bittype, j'ai peut-être besoin de créer une variable de table TinyintType, puis je n'ai pas besoin de lancer. J'essaierai


Yup, la taille du type de données est exactement la même, de sorte que vous ne vous perdrez pas dans la performance, mais vous gagnerez dans la polyvalence


Les autres comparaisons ne retour false , ils renvoient inconnu . La différence est facilement apparente si vous placez un non () autour d'une telle comparaison - non (1 = null) n'est pas vrai .


@Damien_the_unbeliever: Les autres comparaisons ne Retour inconnu , ils évaluent à inconnu E.G. PostgreSQL a une prise en charge partielle du type Boolean de SQL standard, mais utilise null comme un espace réservé pour inconnu , il peut donc être dit pour ce produit que ces comparaisons Évaluez-en à Inconnu (valeur logique) mais retour null (une valeur de données).