Sql server 2008 SQL Server触发器仅适用于单个受影响的行

Sql server 2008 SQL Server触发器仅适用于单个受影响的行,sql-server-2008,triggers,Sql Server 2008,Triggers,我有两张桌子。客户表和客户日志表。在客户中插入或删除任何更新行时。触发器应将其id和操作放入日志表。我的触发器一次只能处理一行。有谁能告诉我如何应付多行情况吗 ALTER TRIGGER [dbo].[tr_customer_updated] ON [dbo].[Customers] AFTER UPDATE,INSERT,DELETE AS DECLARE @action as char(10); DECLARE @customerId as varchar(max); DECLARE @c

我有两张桌子。客户表和客户日志表。在客户中插入或删除任何更新行时。触发器应将其id和操作放入日志表。我的触发器一次只能处理一行。有谁能告诉我如何应付多行情况吗

ALTER TRIGGER [dbo].[tr_customer_updated] ON [dbo].[Customers]
AFTER UPDATE,INSERT,DELETE
AS 
DECLARE @action as char(10);
DECLARE @customerId as varchar(max);
DECLARE @customerName as varchar(max);
SET @action = 'Inserted'; -- Set Action to Insert by default.
IF EXISTS(SELECT * FROM DELETED)
BEGIN
    SET @action = 
        CASE
            WHEN EXISTS(SELECT * FROM INSERTED) 
            THEN 'Updated' -- Set Action to Updated.
            ELSE 'Deleted' -- Set Action to Deleted.       
        END
        select @customerId = Id, @customerName = Name from DELETED;

END
ELSE 
BEGIN
    IF EXISTS(SELECT * FROM INSERTED) 
    BEGIN
        select @customerId = Id, @customerName = Name from INSERTED;
    END
END
insert into CustomerLogs (CustomerId, CustomerName, ActionPerformed, PerformedOn)
VALUES(@customerId, @customerName, @action, GETDATE())
试试这个:

ALTER TRIGGER [dbo].[tr_customer_updated] ON [dbo].[Customers]
AFTER UPDATE,INSERT,DELETE
AS 
DECLARE @action as char(10);
SET @action = 'Inserted'; -- Set Action to Insert by default.
IF EXISTS(SELECT * FROM DELETED)
BEGIN
    SET @action = 
        CASE
            WHEN EXISTS(SELECT * FROM INSERTED) 
            THEN 'Updated' -- Set Action to Updated.
            ELSE 'Deleted' -- Set Action to Deleted.       
        END
        insert into CustomerLogs (CustomerId, CustomerName, ActionPerformed, PerformedOn)
        select Id, Name, @action, GETDATE() from DELETED;

END
ELSE 
BEGIN
    IF EXISTS(SELECT * FROM INSERTED) 
    BEGIN
        insert into CustomerLogs (CustomerId, CustomerName, ActionPerformed, PerformedOn)
        select Id, Name, @action, GETDATE() from INSERTED;
    END
END