我创建了触发器,用于将所有更新的行记录为一行或多行,并将更新的行记录到另一个表中。触发器正在使用一条记录工作正常,但是当我更新整个表时,例如: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
答案 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