如下:
创建学生表和班级表
create table 班级(
编号 int identity constraint PK_班级_编号 primary key,
名称 varchar(30) constraint NK_班级_名称 not null constraint UK_班级_名称 unique,
说明 varchar(200)
);create table 学生(
学号 int identity constraint PK_学生_学号 primary key,
姓名 varchar(20) constraint NK_学生_姓名 not null,
性别 varchar(4) default '男' constraint NK_学生_性别 not null constraint CK_学生_性别 check(性别='男' or 性别='女' or 性别='未知'),
年龄 int constraint NK_学生_年龄 not null constraint  CK_学生_年龄 check(年龄 between 18 and 28),
        班级 varchar(30),
        constraint FK_学生_班级 foreign key(班级) references 班级(名称)
);
--插入如下数据
insert into 班级 values('计算机科学与技术',null);insert into 学生 values ('张三',default,20,'计算机科学与技术');--执行如下语句时出错
update 班级 set 名称='数学' where 名称='计算机科学与技术'
服务器: 消息 547,级别 16,状态 1,行 1
UPDATE 语句与 COLUMN REFERENCE 约束 'FK_学生_班级' 冲突。该冲突发生于数据库 'master',表 '学生', column '班级'。
语句已终止。

解决方案 »

  1.   

    constraint FK_学生_班级 foreign key(班级) references 班级(编号)
    引用编号 别引用汉字
      

  2.   

    班级 varchar(30), 学生表里的这个字段直接保存班级表的ID就可以了
    改为 班级ID 
    create table 学生(
    学号 int identity constraint PK_学生_学号 primary key,
    姓名 varchar(20) constraint NK_学生_姓名 not null,
    性别 varchar(4) default '男' constraint NK_学生_性别 not null constraint CK_学生_性别 check(性别='男' or 性别='女' or 性别='未知'),
    年龄 int constraint NK_学生_年龄 not null constraint CK_学生_年龄 check(年龄 between 18 and 28),
      班级id varchar(30),
      constraint FK_学生_班级 foreign key(班级id) references 班级(编号)
    );
      

  3.   

    update 班级 set 名称='数学' where 名称='计算机科学与技术'  之所以用名称是因为identity列不允许修改  我现在是想测试下 怎么写子表才能跟着主表修改
      

  4.   

    alter table 学生
    Add constraint FK_学生_班级     --约束名
    Foreign key(班级id) references 班级(编号)
    on update cascade  --级联更新 
    on delete cascade  --级联删除