日期:2014-05-17  浏览次数:20530 次

SQL 断言问题
表如下:

create table tra
(
nameID char(5) not null,--人名编号
start_time varchar(20),--出差开始时间
end_time varchar(20),--出差结束时间
city varchar(20),--出差的城市
primary key(nameID,start_time)
)
/*
nameID   start_time  end_time   city
00001 2012-09-26 2012-09-30 北京
00001 2012-10-26 2012-10-30 北京
00002 2012-10-06 2012-10-15 上海
00002 2012-10-20 2012-10-30 广州
00003 2012-10-16 2012-10-15 广州
*/

题目要求:确保出差的每个人每天不可能出现在两个以上城市,用断言设置。
即每个人每天最多只能出现在一个城市。
------解决方案--------------------
primary key(nameID,start_time,city)
------解决方案--------------------
引用:
primary key(nameID,start_time,city)
出差是有一个时间跨度的,单单限制开始时间是不够的。
因为这是一道考试题,但是没有答案,所以我希望能用断言来帮我简答下。
------解决方案--------------------
该回复于2012-11-26 14:28:43被版主删除
------解决方案--------------------
断言?第一次听说呀网上查的语法,但不知道为什么在我的sql2008r2上无法执行 提示语法错误

CREATE assertion  a_test CHECK (
nameID NOT EXISTS (
SELECT nameID FROM tra AS A
WHERE EXISTS(SELECT * FROM tra AS B WHERE B.nameID=A.nameID AND B.city=A.city AND 
DATEDIFF(d,B.start_time,A.start_time)=0 AND DATEDIFF(D,B.end_time,A.end_time)=0 
)
))


仅供参考,等大神们来答疑
------解决方案--------------------
自己顶,坐等大神。
------解决方案--------------------
继续求助。。。
------解决方案--------------------
用触发器吧  ,sqlserver 里没有断言