更新触发器后处理多行

Sai*_*aif 0 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
Run Code Online (Sandbox Code Playgroud)

Luk*_*zda 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
Run Code Online (Sandbox Code Playgroud)

  • 您不需要标量变量,它们不能容纳多行. (2认同)