После вставки триггер обновления не работает - PullRequest
1 голос
/ 24 февраля 2009

У меня есть два триггера после вставки или обновления и вместо вставки. Похоже, что триггер после не работает или отправляет правильные данные.

Я проверил правильную работу хранимой процедуры Z_UpdateStageTable и триггера вместо вставки. Удаление триггера вместо вставки не оказывает никакого влияния. Триггер «После вставки, обновления» работал правильно, я не вносил в него никаких изменений. Я попытался удалить и добавить его, но он все еще не работает или не содержит правильных данных.

Есть идеи?

вместо вставки:

ALTER TRIGGER [DeleteExistingFilter]
   ON  [dbo].[Z_MobileSyncFilters]
INSTEAD OF INSERT
AS 
BEGIN
SET NOCOUNT ON;
DELETE FROM Z_MobileSyncFilters WHERE UserID = (SELECT UserID FROM INSERTED);
INSERT INTO Z_MobileSyncFilters
SELECT *
FROM INSERTED;
END

После вставки, обновление:

TRIGGER [UpdateStageTable] 
   ON  [dbo].[Z_MobileSyncFilters]
   AFTER INSERT,UPDATE
AS 
BEGIN
SET NOCOUNT ON;
DECLARE @AllWos AS VARCHAR(5000);
DECLARE @PmWos AS VARCHAR(5000);
DECLARE @RepWos AS VARCHAR(5000);
SET @AllWos = (SELECT AllWos FROM INSERTED);
SET @RepWos = (SELECT AllWos FROM INSERTED);
SET @PmWos = (SELECT AllWos FROM INSERTED);
EXEC Z_UpdateStageTable @AllWos;
EXEC Z_UpdateStageTable @RepWos;
EXEC Z_UpdateStageTable @PmWos;
END

Ответы [ 3 ]

2 голосов
/ 24 февраля 2009

Есть ли опечатка в SET части триггера AFTER? Вы выбираете одно и то же в трех разных переменных.

Вместо того, чтобы подтверждать поведение Z_UpdateStageTable, я бы попытался заменить его чем-то очень простым (скажем, оператором sql без параметров), чтобы проверить, вызывается ли триггер. Возможно, что sproc не вызывается так, как вы думаете, вызывается.

1 голос
/ 24 февраля 2009

Вы можете добавить операторы PRINT в триггер и вручную вставить его из ManagementStudio / Enterprise Manager, чтобы увидеть, где происходит сбой триггера.

Я вижу проблему, когда вы вставляете несколько записей в один оператор, так как SELECT FROM Inserted вернет более 1 записи.

Вы также можете обновить оператор SET до SELECT @Var = AllWos FROM Inserted

1 голос
/ 24 февраля 2009

Задержитесь на секунду, если идентификатор пользователя - ваш PK, тогда у Z_MobileSyncFilters еще не будет данных, это также вместо триггера

этот блок wholw на самом деле ничего не делает, зачем вам этот триггер?

DELETE FROM Z_MobileSyncFilters WHERE UserID = (SELECT UserID FROM INSERTED);
INSERT INTO Z_MobileSyncFilters
SELECT *
FROM INSERTED;

у вашего второго триггера есть недостатки, потому что он потерпит неудачу, если у вас есть многострочная операция

почему у вас есть 2 триггера вставки (1 вместо 1 после) в этой таблице?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...