Comment contrôler le casting du champ null int sur varchar dans le server sql?

Tout d'abord, j'aimerais savoir comment CAST fonctionne avec les champs NULL et comment se comporte-t-il lorsque la valeur est NULL ?

Par exemple dans l'expression:

 (CAST(INT_FIELD as nvarchar(100)) 

que se passe-t-il si la valeur INT_FIELD est NULL ?

La raison en est que lorsque j'essaie de faire ce qui suit:

 SELECT (CAST(INT_FIELD as nvarchar(100)) + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE; 

Je reçois NULL même si le SOME_OTHER_FIELD n'est pas nul. Je devine qu'il a une sorte de logique que NULL + something = NULL mais je ne suis pas sûr.

Comment puis-je contrôler ce comportement?

Vous devez utiliser ISNULL ou COALESCE , car la plupart des opérations de lignes entre NULL aboutiront à NULL . CAST d'une NULL renvoie NULL et NULL + quelque chose est également NULL . Dans votre exemple, vous devriez faire quelque chose comme ceci:

 SELECT ISNULL(CAST(INT_FIELD as nvarchar(100),'') + ' ' + ISNULL(SOME_OTHER_FIELD,'') FROM SOME_TABLE; 

Bien sûr, dans mon exemple, si les deux champs sont NULL il returnnera '' au lieu de '', mais vous avez l'idée.

Regardez dans COALESCE, où vous pouvez find le premier non nul et returnner 0 si tous sont nuls, par exemple:

 SELECT (CAST(COALESCE(INT_FIELD,0) as nvarchar(100)) + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE; 

Normalement, NULL + (-, /, *, etc) something = NULL . Vous pouvez utiliser

 SELECT ISNULL(CAST(INT_FIELD as nvarchar(100)),'') + ' ' + ISNULL(SOME_OTHER_FIELD FROM SOME_TABLE,'') 

ou vous pouvez SET CONCAT_NULL_YIELDS_NULL OFF ( plus de détails )

Essayez d'utiliser COALESCE

 SELECT COALESCE(CAST(INT_FIELD as nvarchar(100), '') + ' ' + SOME_OTHER_FIELD FROM SOME_TABLE;