У меня есть утверждение 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
).
Наверное, мой самый большой вопрос - как этот триггер нарушает начальный запрос на обновление? Когда триггер установлен, оператор обновления по расписанию перестает работать. Когда я удаляю триггер, все снова работает.
Спасибо за любой совет.