插入或更新时触发,将更新的记录移动到另一个表

时间:2013-10-31 19:49:53

标签: sql-server triggers

我在表A上有一个触发器,如下所示: 我试图将从表A插入或更新的记录移动到表B.表A中的记录多次更新,并希望记录每次更新。因此,表B与表A完全相同,只有3个字段,如datestamp,user和id(primarykey)

ALTER TRIGGER [dbo].[catchupdate]
   ON  Table A
   AFTER INSERT,UPDATE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    declare @userid varchar(128)
    declare @rolereqid varchar(128)
    DECLARE @currDate DATETIME;
        SET @currDate = GETDATE();
        select @userid = system_user

    select @rolereqid = [RoleRequestID] from TableA

    Insert into TableB
    (RoleRequestId, ......list...)
      select * from RoleRequests
      where RoleRequestId = @rolereqid

    Update TableB
      set User_Name1 = @userid, dateupdated = @currDate
      where id = @@IDENTITY

现在插入的记录始终是表A的最后一条记录。我不确定我是否正确捕获了记录,即表A中更新的记录ID。 从TableA中选择@rolereqid = [RoleRequestID]

1 个答案:

答案 0 :(得分:0)

你应该......

select @rolereqid = [RolerequestID] from INSERTED

......而不是......

select @rolereqid = [RolerequestID] from TableA

你应该得到新插入记录的RoleRequestID。 我想你还必须更正示例代码中的其他问题...例如,你从TableB中选择“RoleRequest”表...不应该将TableA作为源代码吗?