2017-09-11 3 views
3

Quand jePourquoi SQL Server 2005 pense que COUNT (...) est nullable?

CREATE VIEW Test1 AS 
WITH OneRow AS (SELECT a = 1) 
SELECT countt = COUNT(*) 
FROM OneRow 

GO 

SELECT COLUMN_NAME, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Test1' 

Je reçois

COLUMN_NAME IS_NULLABLE 
----------- ----------- 
    countt   YES 

Je me serais attendu à IS_NULLABLE être NO, cependant, car je pensais que COUNT(*) retourne toujours un nombre.

Existe-t-il des circonstances dans lesquelles COUNT(*) peut renvoyer NULL? Y a-t-il un danger à l'enrouler comme ISNULL(COUNT(*), 0)? Il semble étrange que cela soit nécessaire. En effet, y a-t-il un scénario dans lequel COUNT(quoi que ce soit) pourrait renvoyer NULL?

Répondre

2

Je ne pense pas que votre cas spécifique verra jamais une valeur NULL dans cette colonne calculée, et je ne pense pas qu'il y ait un problème dans l'encapsulation de la colonne dans ISNULL(). SQL Server signale généralement les colonnes calculées comme NULLABLE.

De https://technet.microsoft.com/en-US/library/ms191250.aspx:

Le moteur de base de données détermine automatiquement la valeur NULL de colonnes calculées sur la base des expressions utilisées. Le résultat de la plupart des expressions est considéré comme nul même si seules les colonnes non nulles sont présentes, car des débits ou débordements possibles produiront également des résultats NULL . Utilisez la fonction COLUMNPROPERTY avec la propriété AllowsNull pour examiner la nullité de n'importe quelle colonne calculée dans une table. Une expression nullable peut être transformée en une valeur non nulle en spécifiant ISNULL (vérification_expression, constante), où la constante est une valeur non substituée à un résultat nul.

+0

Si vous citez des choses, utilisez un '>' pour le citer correctement (ou le bouton blockquote). Sinon, vous serez marqué pour violation du droit d'auteur. –

+0

En d'autres termes, la colonne est * techniquement * nullable, mais elle ne doit jamais renvoyer une valeur nulle. –