create table 课程信息表
(
课程ID char(6) primary key
check (课程ID IN ('JB[0-9][0-9][0-9][0-9]','ZB[0-9][0-9][0-9][0-9]','XX[0-9][0-9][0-9][0-9]','RX[0-9][0-9][0-9][0-9] ')),
课程名称 varchar(40) not null,
课程类别 char(4) check (课程类别 IN ('基础必修','专业必修','限选','任选')),
学分 real check ( 0.5<=学分 AND 学分 <= 5.0),
学时 int
check (学分=学时/16 AND 学时%8=0)
)运行结果显示:
服务器: 消息 8141,级别 16,状态 1,行 1
列 CHECK 约束(属于列 '学时')引用了另一列,表 '课程信息表'。
学时那里的约束条件为:“16学时等于一个学分”,请问是什么原因呢?怎么修改?谢谢!
(
课程ID char(6) primary key
check (课程ID IN ('JB[0-9][0-9][0-9][0-9]','ZB[0-9][0-9][0-9][0-9]','XX[0-9][0-9][0-9][0-9]','RX[0-9][0-9][0-9][0-9] ')),
课程名称 varchar(40) not null,
课程类别 char(4) check (课程类别 IN ('基础必修','专业必修','限选','任选')),
学分 real check ( 0.5<=学分 AND 学分 <= 5.0),
学时 int
check (学分=学时/16 AND 学时%8=0)
)运行结果显示:
服务器: 消息 8141,级别 16,状态 1,行 1
列 CHECK 约束(属于列 '学时')引用了另一列,表 '课程信息表'。
学时那里的约束条件为:“16学时等于一个学分”,请问是什么原因呢?怎么修改?谢谢!
解决方案 »
- 怎么查看注册服务器
- 刚用mssql2005,求教如何用2005把数据从oracle(10g)中导入。急等,谢谢!
- 数据库连不上!????
- 询问一个SQL语句是否有更好的写法!
- 请问insert into a1 select * from a2 如果A1和A2是在不同的数据里的表请问如何插入呢?
- 怎么样在同一个表中设置2主键啊
- 又是``分组``` 聚合, 临时表中的聚合,想了好几天了,没解~?(50分)
- 我想把where 语句, 改为用exists的语句, 为什么下面的不可以. 应该怎样改?
- 求教用触发器完成计算问题
- 我是菜鸟,想请问各位大虾如何在LINUX下使用SQL*PLUS???
- 数据库 sql server 2000 在vc6.0上如何操作
- 还原数据库时要还原两次,第一次老是提示“设备激活错误”
(
课程ID char(6) primary key
check (课程ID IN ('JB[0-9][0-9][0-9][0-9]','ZB[0-9][0-9][0-9][0-9]','XX[0-9][0-9][0-9][0-9]','RX[0-9][0-9][0-9][0-9] ')),
课程名称 varchar(40) not null,
课程类别 char(4) check (课程类别 IN ('基础必修','专业必修','限选','任选')),
学分 real check ( 0.5<=学分 AND 学分 <= 5.0),
学时 int
check (8<=学时 AND 学时<=80 AND 学时%8=0)
);
create table 课程信息表
(
课程ID char(6) primary key
check (课程ID IN ('JB[0-9][0-9][0-9][0-9]','ZB[0-9][0-9][0-9][0-9]','XX[0-9][0-9][0-9][0-9]','RX[0-9][0-9][0-9][0-9] ')),
课程名称 varchar(40) not null,
课程类别 char(4) check (课程类别 IN ('基础必修','专业必修','限选','任选')),
学分 real check ( 0.5<=学分 AND 学分 <= 5.0),
学时 as (学分*16)
)
create table 课程信息表
(
课程ID char(6) primary key
check (课程ID IN ('JB[0-9][0-9][0-9][0-9]','ZB[0-9][0-9][0-9][0-9]','XX[0-9][0-9][0-9][0-9]','RX[0-9][0-9][0-9][0-9] ')),
课程名称 varchar(40) not null,
课程类别 char(4) check (课程类别 IN ('基础必修','专业必修','限选','任选')),
学分 real check ( 0.5<=学分 AND 学分 <= 5.0 and 学分%0.5=0),
学时 as (学分*16)
)
use tempdb;create table 课程信息表
(
课程ID char(6) primary key
check
(课程ID
IN ('JB[0-9][0-9][0-9][0-9]','ZB[0-9][0-9][0-9][0-9]',
'XX[0-9][0-9][0-9][0-9]','RX[0-9][0-9][0-9][0-9]')),
课程名称 varchar(40) not null,
课程类别 char(4) check (课程类别 IN ('基础必修','专业必修','限选','任选')),
--学分 real check ( 0.5<=学分 AND 学分 <= 5.0),
学分 as (学时/16),
学时 int
check (8<=学时 AND 学时<=80 AND 学时%8=0)
);
或是
use tempdb;create table 课程信息表
(
课程ID char(6) primary key
check
(课程ID IN ('JB[0-9][0-9][0-9][0-9]','ZB[0-9][0-9][0-9][0-9]',
'XX[0-9][0-9][0-9][0-9]','RX[0-9][0-9][0-9][0-9]')),
课程名称 varchar(40) not null,
课程类别 char(4) check (课程类别 IN ('基础必修','专业必修','限选','任选')),
学分 real check ( 0.5<=学分 AND 学分 <= 5.0),
学时 as (学分*16)
);
因为你用的是 as , 不是check约束哇以下转自帮助手册:
AS 子句可用来更改结果集列的名称或为派生列分配名称。通过限制列可接受的值,CHECK 约束可以强制域的完整性。此类约束类似于 FOREIGN KEY 约束,因为可以控制放入列中的值。但是,它们在确定有效值的方式上有所不同:FOREIGN KEY 约束从其他表获得有效值列表,而 CHECK 约束通过不基于其他列中的数据的逻辑表达式确定有效值。