1.
create trigger tr_03026H_Rows on 03026H_Rows
stead of insert
as
declare @count int
select @count=count(*) from inserted
if @count=1
insert into 03026H_Rows select * from inserted
create trigger tr_03026H_Rows on 03026H_Rows
stead of insert
as
declare @count int
select @count=count(*) from inserted
if @count=1
insert into 03026H_Rows select * from inserted
create trigger tr_03026H_Rows on 03026H_Rows
instead of insert
as
declare @count int
select @count=count(*) from inserted
if @count=1
begin
insert into 03026H_Rows select * from inserted
insert into 03026H_PartValues (Row_ID,Part_ID)
select i.Row_ID,a.Part_ID
from inserted i,03026H_PartList a
end
看到你的代码和我的有点不一样,能说说你的思路吗?
特别是@@ROWCOUNT和@count的区别。
今天测试时发现,我担心的问题出现了,就是我提的第二个问题,就是update动作把insert的触发器也触发了。其实把它们分开是很简单,但为了更全面学习触发器,请再指点一下吧!
create trigger chk_PartValues
on 03026H_PartValues
for insert,update
as
if @@ROWCOUNT=1 and
BEGIN
if (select count(*) from deleted) = 0
insert into 03026H_ProbSlt (Prob_ID,Row_ID,Part_ID)
select a.Prob_ID,i.Row_ID,i.Part_ID from inserted i,03026H_ProbList a
end
else if @@ROWCOUNT>1
begin
raiserror ('一次只能操作一行数据!',16,1)
rollback transaction
endif (update (PartValue))
begin
DECLARE @MinValue tinyint,
@MaxValue tinyint,
@PartValue decimal(4,2),
@Part_ID int
select @MinValue=a.MinValue,@MaxValue=a.MaxValue,@PartValue=i.PartValue,@Part_ID=i.Part_ID
from inserted i inner join 03026H_PartList a on i.Part_ID=a.Part_ID
if not (@PartValue between @MinValue and @MaxValue)
begin
raiserror ( '%d 部份的分数不在%d 到%d 的范围内!',16,1,@Part_ID,@MinValue,@MaxValue)
rollback transaction
return
end
end
你的update动作肯定是要触发insert的,因为你写的条件是for insert,update。所以建议你还是分开成两个。