SQL中创建触发器,要求插入的值不能小于表W中的值,下面这个写法无论插入什么都失败,求解啊!!!
createtriggertonwforinsertasif(selectmax(sage)fromworker)>=(selectsagefrominserted)be...
create trigger t on w for insert
as
if(select max(sage) from worker)>=(select sage from inserted)
begin
print'年龄sage必须大于0,插入失败'
rollback transaction
end 展开
as
if(select max(sage) from worker)>=(select sage from inserted)
begin
print'年龄sage必须大于0,插入失败'
rollback transaction
end 展开
2个回答
展开全部
你这样做,触发器是你插入完成之后再触发的,也就是说你这条记录已经插进去了,
如果你刚刚插入的是最大值,(select max(sage) from worker)=(select sage from inserted)
如果你刚刚插入的不是最大值,(select max(sage) from worker)>(select sage from inserted)
所以你的条件始终是成立的,所以都是插入失败。
如果你刚刚插入的是最大值,(select max(sage) from worker)=(select sage from inserted)
如果你刚刚插入的不是最大值,(select max(sage) from worker)>(select sage from inserted)
所以你的条件始终是成立的,所以都是插入失败。
更多追问追答
追问
我是从三种情况来试的,大于的,小于的,等于的,结果是年龄sage必须大于0,插入失败'
追答
if(select max(sage) from worker)>=(select sage from inserted)
条件改一下,改成
if(select max(sage) from worker where id !=(select id from inserted))>=(select sage from inserted)
语句中的id是表的唯一键的字段名,这样试试,
展开全部
create trigger t on w for insert
as
declare a int,b int
select a=max(sage) from worker
select b=sage from inserted
if(a>=b)
begin
print '年龄sage必须大于0,插入失败'
rollback
end
as
declare a int,b int
select a=max(sage) from worker
select b=sage from inserted
if(a>=b)
begin
print '年龄sage必须大于0,插入失败'
rollback
end
追问
我实践了你的方法,不行呢,结果还是一样的无法插入
参考资料: http://www.uol123.com/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询