WEB开发网
开发学院数据库MSSQL Server SQL Server的空值处理策略 阅读

SQL Server的空值处理策略

 2007-05-16 09:34:14 来源:WEB开发网   
核心提示: 恰当使用空表值SQL Server可能出现一种特殊情况:在引用父表的一个表中,因为不允许空值,SQL Server的空值处理策略(2),所以“声明引用完整性”(DRI)可能不会得到强制,即使父表不包含空值,将允许一个空值,然后丢弃所有表,在子表引用了父表主键约束或惟

恰当使用空表值

SQL Server可能出现一种特殊情况:在引用父表的一个表中,因为不允许空值,所以“声明引用完整性”(DRI)可能不会得到强制。即使父表不包含空值,在子表引用了父表主键约束或惟一约束的列中,也可能包含空值。

假如来自父表的值目前未知,就不会有任何问题。例如,父表可能是一个地址表,而子表可能包含联系信息。由于许多原因,可能暂时不知道要传给父表的联系地址。这是一种基于时间的问题,空值在其中或许是合适的。

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

SET NOCOUNT ON
GO
CREATE TABLE Parent
(pkey1 INT IDENTITY NOT NULL
CONSTRAINT pkParent PRIMARY KEY,
col1 INT NULL)
GO
INSERT Parent (col1) VALUES (284)
GO
INSERT Parent (col1) VALUES (326)
GO

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

CREATE TABLE Child
(pkey1 INT IDENTITY
CONSTRAINT pkChild PRIMARY KEY,
Parentpkey1 INT NULL
CONSTRAINT fkChildParent FOREIGN KEY
REFERENCES Parent(pkey1),
col1 INT NULL)
GO
INSERT Child (Parentpkey1, col1) VALUES (null,2)
GO

但在以下代码中,要同时从父表和子表选择值。虽然父表不包含空值,但在子表引用了父表的那个列中,将允许一个空值。

然后丢弃所有表,清除这个演示所用的数据库对象。

SELECT * FROM Child
GO
SELECT * FROM Parent
GO
DROP TABLE Child, Parent
GO

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

Tags:SQL Server 空值

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接