【问题标题】:Trigger on insert or update, which moves the updated record to another table在插入或更新时触发,将更新的记录移动到另一个表
【发布时间】:2023-03-26 15:30:01
【问题描述】:

我在表 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 的最后一条记录。我不确定我是否正确捕获了 recordid,即表 A 中更新的记录 id。 从 TableA 中选择 @rolereqid = [RoleRequestID]

【问题讨论】:

    标签: sql-server triggers


    【解决方案1】:

    你应该...

    select @rolereqid = [RolerequestID] from INSERTED
    

    ...而不是...

    select @rolereqid = [RolerequestID] from TableA
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 2014-02-23
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多