数据完整性是任何数据库系统要保证的重点不管系统计划得有多好空数据值的问题总是存在本文探讨了在SQL Server中处理这些值时涉及的个问题计数使用空表值以及外键处理
用COUNT(*)处理空值
大多数集合函数都能在计算时消除空值COUNT函数则属于例外对包含空值的一个列使用COUNT函数空值会从计算中消除但假如COUNT函数使用一个星号它就计算所有行而不管是否存在空值
如果希望COUNT函数对给定列的所有行(包括空值)进行计数请使用ISNULL函数ISNULL函数会将空值替换成有效的值
事实上对集合函数来说如果空值可能导致错误结果ISNULL函数就非常有用记住在使用一个星号时COUNT函数会对所有行进行计算下例演示了空值在AVG和COUNT集合函数中的影响
SET NOCOUNT ON
GO
CREATE TABLE xCount
(pkey INT IDENTITY NOT NULL
CONSTRAINT pk_xCount PRIMARY KEY
Col int NULL)
GO
INSERT xCount (Col) VALUES ()
GO
INSERT xCount (Col) VALUES ()
GO
INSERT xCount (Col) VALUES ()
GO
INSERT xCount (Col) VALUES (NULL)
GO
SELECT AVG(Col) AvgWithoutIsNullFunctionOnCol
AVG(ISNULL(Col)) AvgWithIsNullFunctionOnCol
COUNT(Col) NoIsNullFunctionOnCol
COUNT(ISNULL(Col)) UsingIsNullFunctionOnCol
Count(*) UsingAsterisk
FROM xCount
GO
DROP TABLE xCount
GO
OUTPUT: