if exists (select name from sysobjects where name='T_score')
drop trigger T_score
go
create trigger T_score
on score
for insert
as
declare @score int
select @score=course from inserted
--if (exists (select * from inserted i,score s where i.course=s.course))
if(not exists (select * from score where course=@score))
begin
print '已执行'
select * from score
end
else
begin
raiserror('输入重复',16,1)
rollback transaction
select * from score where course=@score
end
总是不能插入,难道有是if错了?
不是总错嘛,加else测一下。
我觉得不是这样的。
请前辈再考虑一下。
begin
print '已执行'
select * from score
end
else
begin
raiserror('输入重复',16,1)
rollback transaction
select * from score where course=@score
end没试试在else里边加print? 我觉得它总跑到else里了呢?
跟我想要的正好相反。
AS
SELECT * FROM TT WHERE NOT EXISTS(SELECT 1 FROM INSERTED)
GO
INSERT TT SELECT 1
/*
ID
----------- (所影响的行数为 0 行)很简单的测试,说明表里面已经有1这个数据了
这样就好了
if(exists (select name from sysobjects where name='T_Topic'))
drop trigger T_Topic
go
create trigger T_Topic
on Topic
after insert
as
if (exists (select UScore from users a,inserted i where a.uid = i.tuid and a.Uscore < i.Tscore))
begin
Raiserror('您的积分不足',16,1)
Rollback transaction
end
else
select * from inserted
update a set a.UScore=a.UScore- i.Tscore from Users a,inserted i where a.UId=i.TUid
Go
改成这个就行了if exists (select name from sysobjects where name='T_score')
drop trigger T_score
go
create trigger T_score
on score
INSTEAD OF insert
as
declare @score int
select @score=course from inserted
--if (exists (select * from inserted i,score s where i.course=s.course))
if(not exists (select * from score where course=@score))
begin
print '已执行'
select * from score
end
else
begin
raiserror('输入重复',16,1)
rollback transaction
select * from score where course=@score
end
对 AFTER和INSTEAD OF的区别更是不理解。
谢谢前辈们的帮助