注册 登录
编程论坛 SQL Server论坛

SQL Server 问题?欢迎来解答,

LOVE1314520 发布于 2011-05-25 10:27, 725 次点击
/*图书借阅表【Borrow】*/
/*
    RID varchar(50) 读者编号,复合主键,读者信息表的外键,必填
    BID varchar(50) 图书编号,复合主键,图书信息表的外键,必填
    LendDate datetime 借阅日期,复合主键,默认为当前日期,必填
    WillDate datetime 应还日期,必须大于等于借阅日期,默认为借阅日期+1个月
    ReturnDate datetime 实际归还日期,默认为空
*/
if exists(select name from sysobjects where name='Borrow')
  drop table Borrow
go
create table Borrow
(
    RID          varchar(50) not null ,    --读者编号,复合主键,读者信息表的外键,必填
    BID          varchar(50) not null ,    --图书编号,复合主键,图书信息表的外键,必填
    LendDate     datetime    not null ,    --借阅日期,复合主键,默认为当前日期,必填
    WillDate     datetime    check(WillDate>=LendDate) default(dateadd(mm,1,LendDate))        ,    --应还日期,必须大于等于借阅日期,默认为借阅日期+1个月
    ReturnDate   datetime                  --实际归还日期,默认为空
)
go


红色的地方有错误!但我不理解啊!
7 回复
#2
LOVE13145202011-05-25 11:00
还以为回得快啊,等了30分钟。没人回答!
#3
go20112011-05-25 11:45
CHECK 约束通过不基于其他列中的数据的逻辑表达式确定有效值,也就地说CHECK中的有效表达式包括常量、常量表达式和变量(在某些上下文中),不允许使用列名,在本例中就是表达式中不能使用 “LendDate”。同样,在DEFAULT中也不能用列名。

[ 本帖最后由 go2011 于 2011-5-25 11:51 编辑 ]
#4
LOVE13145202011-05-25 12:06
回复 3楼 go2011
那应该怎样写,才可以啊。
#5
LOVE13145202011-05-25 13:37
来人帮帮我啊
#6
go20112011-05-25 23:57
create table Borrow
(
    RID          varchar(50) not null ,    --读者编号,复合主键,读者信息表的外键,必填
    BID          varchar(50) not null ,    --图书编号,复合主键,图书信息表的外键,必填
    LendDate     datetime default(getdate()),    --借阅日期,复合主键,默认为当前日期,必填
    WillDate     datetime default(dateadd(mm,1,getdate())),check(WillDate>=LendDate),    --应还日期,必须大于等于借阅日期,默认为借阅日期+1个月
    ReturnDate   datetime                  --实际归还日期,默认为空
)

注意check前的逗号,它使列级check变为表级check,表级check能引用同一表中的列。
#7
舟殇2011-05-29 01:04
学习了
#8
w1230123062011-05-30 09:24
study
1