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

解决方案 »

  1.   

    呵呵,误解你的意思了1.
    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
      

  2.   

    谢谢 txlicenhe(马可&不做技术高手)请问letsflytogether(恨!不能拥有天下所有的财富,然后平分):
    看到你的代码和我的有点不一样,能说说你的思路吗?
    特别是@@ROWCOUNT和@count的区别。
      

  3.   

    txlicenhe(马可&不做技术高手):
    今天测试时发现,我担心的问题出现了,就是我提的第二个问题,就是update动作把insert的触发器也触发了。其实把它们分开是很简单,但为了更全面学习触发器,请再指点一下吧!
      

  4.   

    把第一个触发器这样改改试试
    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
      

  5.   

    @@ROWCOUNT是系统变量,@count是自己定义的变量,二者目的都是为了得到改变的行数,是一样的。
    你的update动作肯定是要触发insert的,因为你写的条件是for insert,update。所以建议你还是分开成两个。