您当前位置:优侠库 > 资讯攻略 >
来源:未知
2022-02-09 01:12:29 浏览: 分类:资讯攻略

在SQL Server中处理空值时涉及的三个问题

本文主要介绍sql server中处理空值涉及的三个问题:计数、使用空表值和外键处理。

带计数的句柄空值(*)


大多数聚合函数在计算时都可以消去空值;COUNT函数是一个例外。对包含空值的列使用COUNT函数,将从计算中消除空值。但是如果COUNT函数使用星号,它将对所有行进行计数,而不管空值是否存在。


如果希望COUNT函数对给定列的所有行进行计数(包括空值),请使用ISNULL函数。ISNULL函数将用有效值替换空值。


其实对于聚合函数来说,如果空的值可能导致错误的结果,ISNULL函数是非常有用的。请记住,当使用星号时,COUNT函数将计算所有行。以下示例演示了avg和COUNT聚合函数中空值的影响:


以下是引用的内容:

设置NOCOUNT ON

GO

创建表xCount

(pkey 1 INT IDENTITY NOT NULL

约束pk_xCount主键,

col 1 INT NULL)
GO
INSERT xCount(col 1)VALUES(10)


GO

INSERT xCount(col 1)

WIsNullFnctnCol1使用星号

- - - -

15 11 3 4 4

使用适当的空表值。

SQL Server中可能存在一种特殊情况:在引用父表的表中,不允许使用空值,因此“声明参照完整性(DRI)”可能不会强制执行。即使父表不包含空值,其子表引用父表的主键约束或唯一约束的列也可能包含空值。


如果父表中的值当前未知,则不会有问题。例如,父表可以是地址表,而子表可以包含联系信息。由于许多原因,要传递给父表的联系地址可能暂时不知道。这是一个基于时间的问题,其中空的值可能比较合适。


如下面的示例所示,我们创建父表并向其中插入两个值。

以下是引用的内容:


SET NOCOUNT ON

GOCREATE表父级(pkey1 INT IDENTITY不为空

约束pkParent主键,col1 INT NULL)GOINSERT

父(列1)值(284)GOINSERT

父(列1)值(326)GO

下面的代码创建一个子表,并在引用父表的列中插入一个空值。

以下是引用的内容:

创建子表

(pkey 1 INT identity constraint PK child

主键,parent pkey 1 INT null constraint fkchild parent

外键引用父级(pkey1),列1 INT NULL)

GOINSERT子级(Parentpkey1,col1)值(null,2)GO

但是,在下面的代码中,您希望从父表和子表中选择值。虽然父表不包含空值,但是在子表引用父表的列中允许有空值。

然后丢弃所有表并清除本演示中使用的数据库对象。

SELECT * FROM childgo SELECT * FROM ParentGO drop表Child,parent go

您可以检查外键空中数据的有效性

如果两列一起形成主键,并且子表继承主键作为外键,值为空,则可能会获得错误的数据。您可以在一个外键列中插入有效值,但在另一个外键列中插入空值。然后,可以添加数据表检查约束来检查外键中数据的有效性,外键可以是空。

任何多列外键都可能遇到同样的问题。因此,您需要添加一个检查约束来检测异常。最初,check约束将检查组成外键的所有列中空的可能值。该检查还会检查这些列中不能为空的值。如果两个检查都通过了,问题就解决了。

以下示例脚本显示了此类异常以及如何通过检查约束来纠正它。

关键词:SQLServer

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227272.html

攻略资讯
安卓软件
安卓游戏