create trigger addbook
on book
for insert 
as
begin
       if not exists (select * from book where book.bno=inserted.bno)
begin 
exec proc ins_newbook inserted.bno,inserted.num
end
else 
begin
exec proc ins_addbook inserted.bno,inserted.num
end  
end要怎么改

解决方案 »

  1.   

    CREATE TRIGGER addbook ON book
    FOR  INSERT
    AS
    BEGIN
    IF NOT EXISTS (
           SELECT * 
           FROM book
           WHERE book.bno = inserted.bno
       )
    BEGIN
    DECLARE @s1 VARCHAR(8000)
        SELECT @s1=ISNULL(@s1+';','')+'EXEC ins_newbook '''+ltrim(bno)+''','''+ltrim(num)+''''
        EXEC(@s1)
    END
    ELSE 
    BEGIN
    DECLARE @s2 VARCHAR(8000)
        SELECT @s2=ISNULL(@s1+';','')+'EXEC ins_addbook '''+ltrim(bno)+''','''+ltrim(num)+''''
        EXEC(@s2)
    END
    END
    GO
      

  2.   

    楼上手误,修改一下:CREATE TRIGGER addbook ON book
    FOR  INSERT
    AS
    BEGIN
    IF NOT EXISTS (
           SELECT * 
           FROM book
           WHERE book.bno = inserted.bno
       )
    BEGIN
    DECLARE @s1 VARCHAR(8000)
        SELECT @s1=ISNULL(@s1+';','')+'EXEC ins_newbook '''+ltrim(bno)+''','''+ltrim(num)+''''
        FROM inserted
        EXEC(@s1)
    END
    ELSE 
    BEGIN
    DECLARE @s2 VARCHAR(8000)
        SELECT @s2=ISNULL(@s1+';','')+'EXEC ins_addbook '''+ltrim(bno)+''','''+ltrim(num)+''''
        FROM inserted
        EXEC(@s2)
    END
    END
    GO
      

  3.   


    create trigger addbook on book
    for insert 
    as
     declare c cursor local for select * from inserted;
     open c; declare @bno int, @num int;
     fetch next from c into @bno, @num;
     while @@fetch_status = 0
     begin
      if not exists (select * from book where bno=@bno)
        exec ins_newbook @bno, @num;
      else
        exec ins_addbook @bno, @num;
      fetch next from c into @bno, @num;
     end close c;
     deallocate c;
    go
      

  4.   

    CREATE TRIGGER addbook ON book
    FOR  INSERT
    AS
    BEGIN
    DECLARE @s VARCHAR(8000)
    IF NOT EXISTS (
           SELECT * 
           FROM book
           WHERE book.bno = inserted.bno
       )
    BEGIN
        SELECT @s = ISNULL(@s+';', '')+'EXEC ins_newbook '''+LTRIM(bno)+''','''+LTRIM(num)+''''
        FROM inserted
        EXEC(@s)
    END
    ELSE 
    BEGIN
        SELECT @s=ISNULL(@s+';','')+'EXEC ins_addbook '''+ltrim(bno)+''','''+ltrim(num)+''''
        FROM inserted
        EXEC(@s)
    END
    END
    GO这样试试
      

  5.   

    服务器: 消息 156,级别 15,状态 1,过程 addbook,行 11
    在关键字 'proc' 附近有语法错误。
    服务器: 消息 156,级别 15,状态 1,过程 addbook,行 15
    在关键字 'proc' 附近有语法错误。
      

  6.   


    注意复制代码,我代码里面没有用到PROC这个字眼。
      

  7.   


    服务器: 消息 107,级别 16,状态 2,过程 addbook1,行 6
    列前缀 'inserted' 与查询中所用的表名或别名不匹配。
    刚刚复制多了,不好意思
      

  8.   

    你的代码错误点有:
    1.没有用到inserted 这个逻辑表
    2.exec proc 过程名这里面多了个PROC,属于语法错误。
    3.没有考虑同时插入多条记录的情况。
      

  9.   


    执行了,提示这样:
    服务器: 消息 107,级别 16,状态 2,过程 addbook1,行 6
    列前缀 'inserted' 与查询中所用的表名或别名不匹配。
      

  10.   

    create trigger addbook
    on book
    for insert 
    as
    begin
           declare @bno varchar(20) , @num int
    set @bno = ((select bno from inserted where(bno=@bno)))
    set @num = ((select num from inserted where(bno=@bno))) 
    if not exists (select * from book where book.bno=inserted.bno)
    begin 
    exec proc ins_newbook @bno,@num
    end
    else 
    begin
    exec proc ins_addbook @bno,@num
    end  
    end这是我刚刚修改后的,用到了inserted,可是还是错
      

  11.   

    select bno,num from book 这个查询有结果吗?
      

  12.   


    你EXEC后面的proc怎么老是阴魂不散呢
      

  13.   


    哦,谢了,我再看看.但是在insert的时候给我这样提示:
    服务器: 消息 16924,级别 16,状态 1,过程 addbook,行 8
    Cursorfetch: 在 INTO 列表中声明的变量数目必须与所选择的列数目匹配。
    语句已终止。可是我那些都一样啊
      

  14.   

    去掉了就提示:
    服务器: 消息 107,级别 16,状态 2,过程 addbook,行 9
    列前缀 'inserted' 与查询中所用的表名或别名不匹配。
      

  15.   

    --发现一个错误了:CREATE TRIGGER addbook ON book
    FOR  INSERT
    AS
    BEGIN
        DECLARE @s VARCHAR(8000)
        IF NOT EXISTS (
               SELECT 1 
               FROM book,inserted   --这里没注意到,跟着楼主错了。
               WHERE book.bno = inserted.bno
           )
        BEGIN
            SELECT @s = ISNULL(@s+';', '')+'EXEC ins_newbook '''+LTRIM(bno)+''','''+LTRIM(num)+''''
            FROM inserted
            EXEC(@s)
        END
        ELSE 
        BEGIN
            SELECT @s=ISNULL(@s+';','')+'EXEC ins_addbook '''+ltrim(bno)+''','''+ltrim(num)+''''
            FROM inserted
            EXEC(@s)
        END
    END
    GO