外键关联的问题
alter table Staff_Info
add constraint FK_STAFF_IN_REFERENCE_STAFFT_YP foreign key (Staff_Type)
references Staff_Type (ID)
go
发生错误:
服务器: 消息 547,级别 16,状态 1,行 1
ALTER TABLE 语句与 COLUMN FOREIGN KEY 约束 'FK_STAFF_IN_REFERENCE_STAFFT_YP' 冲突。该冲突发生于数据库 'BuedriInfo',表 'Staff_Type', column 'ID'。
警告: 已创建表 'Staff_Info',但其最大行大小(11383)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。
Staff_Info里有Staff_Type(int)字段,Staff_Type表里有ID字段(int,自动增1)
烦劳告诉指点
问题点数:100、回复次数:7Top
1 楼hanlijunnm(阿呆)回复于 2005-01-27 10:37:58 得分 0
请高手指点Top
2 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-01-27 10:44:22 得分 0
taff_Type表里的ID字段建为主键了吗?Top
3 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-01-27 10:49:17 得分 50
Staff_Type表里的ID字段建为主键了吗?
另外,SQL Server 每个数据页的可存储数据大小为8060字节,一行数据[不包括image\text\ntext]的最大长度不能超过这个上限。
因为Staff_Info表的所有字段定义的最大长度之和为11383,如果在insert或update数据时,实际数据长度超过了8060,则会出现错误。Top
4 楼Softlee81307(孔腎)回复于 2005-01-27 10:51:41 得分 0
高手Top
5 楼jayfunk(crazydog)回复于 2005-01-27 11:00:00 得分 20
外键相对于主键的,所以引用为外键就是是主键!当一行大用8060时候,就用成text类型啦
Top
6 楼dellair(dellair)回复于 2005-01-27 11:06:14 得分 30
alter table Staff_Info with nocheck
add constraint FK_STAFF_IN_REFERENCE_STAFFT_YP foreign key (Staff_Type)
references Staff_Type (ID)
go
这个试一试,如果没有行数的错误,应该是可以的Top
7 楼hdhai9451(☆新人类☆)回复于 2005-01-27 11:43:20 得分 0
要保證Staff_Type表的ID是主鍵,如果表Staff_Info 已經存在記錄集,你添加外鍵時是否檢查以前的記錄集?因為以前的記錄人些是不符合Staff_Type (ID),所以下面要加with no check
alter table Staff_Info with no check
add constraint FK_STAFF_IN_REFERENCE_STAFFT_YP foreign key (Staff_Type)
references Staff_Type (ID)
go
with no check的作用:加外鍵時不檢查以前的記錄Top





