更新触发器后处理多行

时间:2015-12-19 15:55:16

标签: sql sql-server

我创建了触发器,用于将所有更新的行记录为一行或多行,并将更新的行记录到另一个表中。触发器正在使用一条记录工作正常,但是当我更新整个表时,例如:update TBL_ADM_USER_GROUP set name = '123'只有一条记录被记录到TBL_TestTable?为什么只有一行登录TBL_TestTable以及如何启用此触发器来记录所有更新的行?

触发:

CREATE TRIGGER [dbo].[Group_Update]
ON [dbo].[TBL_ADM_USER_GROUP]

 AFTER UPDATE
  AS
   BEGIN

   SET NOCOUNT ON;

   DECLARE @userid INT
   DECLARE @name nvarchar(1000)

   SELECT @userid = i.changer_user_id from inserted i; 
   select @name = i.name from inserted i;

   INSERT INTO TBL_TestTable
   VALUES (CONCAT('Group "' ,@name,'" is updated'), 'GROUP', 'Update', SYSDATETIME(), @userid)

END

1 个答案:

答案 0 :(得分:5)

SQL Server触发器中,每个语句都有效,而不是逐行。使用:

CREATE TRIGGER [dbo].[Group_Update]
ON [dbo].[TBL_ADM_USER_GROUP]
AFTER UPDATE
AS
BEGIN
   SET NOCOUNT ON;

   INSERT INTO TBL_TestTable    -- define column list for clarity
   SELECT CONCAT('Group "' ,i.name,'" is updated'),
         'GROUP', 'Update', SYSDATETIME(),
         i.changer_user_id
   FROM inserted i;
END