Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Database/JDBC/SQL/JDO/Hibernate  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 [转]检查可空外键 [精华]
C



发贴: 0
积分: 0
于 2002-08-24 03:31 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
作者: hp6p

当主键是由两列组成,子表继承该主键作为可空(NULLABLE)外键有一个继承该主关键字作为无效外来关键字的子表,在这些数据当中很可能包含无效的错误的数据。你可以向一个外键列插入有效值,并且向另外的外键列输入空,添加表约束检查可空外键的数据合法性。

这种情况会在任何的多列外键中发生。如果这个外键由两个或者更多的列组成,那么,就更有可能发生这种情况。你需要添加检查条件来测试该异常情况。最初,检查条件会检查所有列中的可空值,包含了外键。它还会检查其中的非空值。如果这两个检查都被通过,那么,该情况就不会发生。

下面所列的就是一个程序范例。这个程序范例向我们展示了出现该情况并将其解决的过程。

 
SET NOCOUNT ON
GO
CREATE TABLE parent (pkey1 INT IDENTITY NOT NULL, pkey2 INT NOT NULL, col1 INT NULL,
CONSTRAINT pk_parent PRIMARY KEY NONCLUSTERED ( pkey1, pkey2))
GO
INSERT parent (pkey2) VALUES ( 2 )
INSERT parent (pkey2) VALUES ( 85 )
INSERT parent (pkey2) VALUES ( 41 )
INSERT parent (pkey2) VALUES ( 11 )
GO
SELECT * FROM parent
GO
CREATE TABLE child (cpkey1 INT IDENTITY NOT NULL
CONSTRAINT pk_child PRIMARY KEY NONCLUSTERED (cpkey1),
pkey1 INT NULL, pkey2 INT NULL, col1 INT NULL,
CONSTRAINT fk_parent_child FOREIGN KEY (pkey1, pkey2)
REFERENCES parent (pkey1, pkey2))
GO
INSERT child (pkey1, pkey2) VALUES ( null, 85 )
GO
SELECT * FROM child
GO
DELETE child
GO
ALTER TABLE child WITH NOCHECK
ADD CONSTRAINT ck_fk_parent_child CHECK
( (pkey1 IS NOT NULL AND pkey2 IS NOT NULL) OR
(pkey1 IS NULL AND pkey2 IS NULL) )
GO
INSERT child (pkey1, pkey2) VALUES ( null, 11 )
GO
DROP TABLE child, parent
GO





flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923