SQL 服务器更新触发器 - 破坏事物

SQL Server UPDATE Trigger - breaking things

我有一个更新语句,长话短说,每半分钟运行一次。此语句在 Powershell 中,所以不要介意变量语法...

UPDATE dbo.MobileLeases 
SET IPAddress = '$($l.IPAddress)', 
    OwnerName = '$($l.OwnerName)', 
    Building = '$($l.Building)', 
    TimeOn = '$($l.Time)', 
    LeaseExpiry = '$($l.LeaseExpiry)', 
    Phone = '$($l.Phone)', 
    OwnerEmail = '$($l.OwnerEmail)' 
WHERE PhysicalAddress = '$($l.DeviceID)';

这部分效果很好,我更新这些专栏没有问题。每次运行它都会更新多行

我有一个更新触发器,我正试图将其放在 table、dbo.MobileLeases 上。当 Building 列在 dbo.MobileLeases 中更新时,我想将一个 INSERT 执行到另一个 table、dbo.LeaseAudit.

insert into 似乎适用于触发器到位后的第一次更新。之后,计划的 UPDATE 语句(来自 Powershell)停止工作!这让我感到困惑,但这是触发因素...

CREATE TRIGGER [dbo].[trigger_LeaseAudit] 
ON [dbo].[MobileLeases]
AFTER UPDATE 
AS
BEGIN
    SET NOCOUNT ON;

    IF UPDATE (Building)
    BEGIN
        INSERT INTO dbo.LeaseAudit(PhysicalAddress, DeviceName, OwnerName, Building, TimeOn, IPAddress)
           SELECT 
               i.PhysicalAddress, i.DeviceName, i.OwnerName, i.Building,
               i.TimeOn, i.IPAddress
           FROM
               MobileLeases AS m
           INNER JOIN 
               inserted AS i on m.PhysicalAddress = i.PhysicalAddress
           INNER JOIN 
               deleted AS d on m.PhysicalAddress = d.PhysicalAddress
           WHERE 
               m.Building <> d.Building
        END
END

如您所见,当 (Building)dbo.MobileLeases 上更新时,我正在尝试 INSERT INTO dbo.LeaseAudit,其中旧更新值 (d.Building)与新值不同 (m.Building).

我想我最大的问题是这个触发器是如何破坏初始更新查询的?触发器就位后,预定的更新语句将停止工作。当我移除触发器时,一切又恢复正常了。

感谢您的任何建议。

答案是 UPDATE 交易整体失败。

在 tableA 上配置的更新触发器旨在在更新 tableA.column1 时在 tableB 上插入新行。

插入语句包含 设置为 tableB 上的 PK 的列。很明显,insert语句无法在PK列中插入一个重复的值,所以整个update就炸了。

我的解决方案是从 tableB.PK 中删除 PK 属性。是审计table,应该不会错过

谢谢