1

我在表 A 上有一个触发器,如下所示: 我正在尝试将插入或更新的记录从表 A 移动到表 B。表 A 中的记录被更新了很多次,并且想要跟踪每次更新。因此表 B 与表 A 完全相同,只有 3 个字段,如日期戳、用户和 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 的最后一条记录。我不确定我是否正确捕获了记录 ID,即表 A 中更新的记录 ID。从表 A 中选择 @rolereqid = [RoleRequestID]

4

1 回答 1

0

你应该 ...

select @rolereqid = [RolerequestID] from INSERTED

... 代替 ...

select @rolereqid = [RolerequestID] from TableA

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

于 2013-11-01T07:09:18.740 回答