web-dev-qa-db-fra.com

IS NULL vs = NULL dans la clause where + SQL Server

Comment vérifier une valeur IS NULL [or] = @param (où @param est null)

Ex:

Select column1 from Table1
where column2 IS NULL => works fine

Si je veux remplacer la valeur de comparaison (IS NULL) par @param. Comment cela peut-il être fait

Select column1 from Table1
where column2 = @param => this works fine until @param got some value in it and if is null never finds a record.

Comment cela peut-il atteindre?

14
Sreedhar
select column1 from Table1
  where (@param is null and column2 is null)
     or (column2 = @param)
36
Laurence Gonsalves

Je me rends compte que c’est une vieille question, mais j’avais la même et j’ai eu une autre réponse (plus courte). Remarque: cela ne fonctionne que pour MS SQL Server, qui prend en charge ISNULL (expr, remplacement).

SELECT column1 FROM table1
WHERE ISNULL(column2,'') = ISNULL(@param,'')

Cela suppose également que vous traitiez les chaînes NULL et vides de la même manière.

3
Dan

Pour ce faire, il n’existe pas d’approche de type «taille unique», il existe des implications subtiles en termes de performances. Si vous souhaitez aller au-delà pour que la requête renvoie la réponse correcte, quelle que soit sa lenteur, consultez cet article sur Conditions de recherche dynamique dans T-SQL de Erland Sommarskog

voici un lien vers la partie sur x = @x OR @x IS NULL

2
KM.
WHERE ((COLUMN1 = @PARAM) OR (COLUMN1 IS NULL AND @PARAM IS NULL))
1
Diego Mendes
Select column1 from Table1
where (column2 IS NULL and @param IS NULL) 
or ( column2 IS NOT NULL AND @param IS NOT NULL AND ( column2 = @param )  )
0
Mike A