set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[learningChange]
on  [dbo].[learning]
for insert,update,delete
as
declare @ID int,
@NAME varchar(20),
@RNAME varchar(256),
@RURL varchar(600)
begin
SELECT @ID=USERID,@NAME=USERNAME,@RNAME=RESOUCENAME,@RURL=RESOUCEURL FROM learning
INSERT INTO learning1(USERID,USERNAME,RESOUCENAME,RESOUCEURL) VALUES(@ID,@NAME,@RNAME,@RURL)
END
为什么我用的这个触发器,只有给learning表插入的时候learning1表的显示是正确的,修改,和删除的时候,给learning1的表插入的都是最后一条记录?这是为什么?

解决方案 »

  1.   

    ALTER trigger [dbo].[learningChange]
    on [dbo].[learning]
    for insert,update,delete
    as
    declare @ID int,
    @NAME varchar(20),
    @RNAME varchar(256),
    @RURL varchar(600)
    begin
    SELECT @ID=USERID,@NAME=USERNAME,@RNAME=RESOUCENAME,@RURL=RESOUCEURL FROM inserted
    INSERT INTO learning1(USERID,USERNAME,RESOUCENAME,RESOUCEURL) VALUES(@ID,@NAME,@RNAME,@RURL)
    END
      

  2.   

    确切的说 你这这是三个触发器  insert update delete  你看你写的代码  程序知道要插入的那条记录 是你想让它插入的那条记录么
      

  3.   

    [Quote=引用 1 楼 chinajiyong 的回复:]
    你说的不行,换了就成空的了。
      

  4.   

    [Quote=引用 2 楼 yanbuodiao 的回复:]
    能给个可行的建议么?我是新手。
      

  5.   

    不是说的很明确了  建三个触发器  分别是insert update delete
      

  6.   


    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER trigger [dbo].[learningInsert]
    on [dbo].[learning]
    for insert
    as
    declare @ID int,
    @NAME varchar(20),
    @RNAME varchar(256),
    @RURL varchar(600)
    begin
    SELECT @ID=USERID,@NAME=USERNAME,@RNAME=RESOUCENAME,@RURL=RESOUCEURL FROM inserted
    INSERT INTO learning1(USERID,USERNAME,RESOUCENAME,RESOUCEURL) VALUES(@ID,@NAME,@RNAME,@RURL)
    ENDset ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER trigger [dbo].[learningUpdate]
    on [dbo].[learning]
    for update
    as
    declare @ID int,
    @NAME varchar(20),
    @RNAME varchar(256),
    @RURL varchar(600)
    begin
    SELECT @ID=USERID,@NAME=USERNAME,@RNAME=RESOUCENAME,@RURL=RESOUCEURL FROM updated
    INSERT INTO learning1(USERID,USERNAME,RESOUCENAME,RESOUCEURL) VALUES(@ID,@NAME,@RNAME,@RURL)
    ENDset ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER trigger [dbo].[learningDelete]
    on [dbo].[learning]
    for delete
    as
    declare @ID int,
    @NAME varchar(20),
    @RNAME varchar(256),
    @RURL varchar(600)
    begin
    SELECT @ID=USERID,@NAME=USERNAME,@RNAME=RESOUCENAME,@RURL=RESOUCEURL FROM deleted
    INSERT INTO learning1(USERID,USERNAME,RESOUCENAME,RESOUCEURL) VALUES(@ID,@NAME,@RNAME,@RURL)
    END