我有一个UPDATE语句,长话短说,每半分钟运行一次。这个语句在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)';
这部分效果很好,我更新这些列没有问题。它每次运行时都会更新多行。
我有一个更新触发器,我试图放在这个表dbo.MobileLeases
上。在Building
中更新dbo.MobileLeases
列后,我想在另一个表INSERT
中执行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
正如您所看到的那样INSERT INTO
dbo.LeaseAudit
(Building)
更新dbo.MobileLeases
时,旧的更新值(d.Building
)不同到新值(m.Building
)。
我想我最大的问题是这个触发器如何打破初始更新查询?触发器就位后,预定的更新语句将停止工作。当我移除触发器时,一切都会再次起作用。
感谢您的任何建议。
答案 0 :(得分:1)
答案是UPDATE
交易整体失败。
tableA上配置的更新触发器用于在tableA.column1更新时在tableB上插入新行。
insert语句包含 在tableB上设置为PK的列。显然,insert语句无法在PK列中插入重复值,因此整个更新都是轰炸。
我的解决方案是从tableB.PK中删除PK属性。这是一张审计表,所以我不应该错过它。
谢谢