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
在可以为空的外键中检查数据的有效性
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
赞助商链接