2009-02-24 53 views
1

我有兩個觸發器插入或更新後,而不是插入。看來after trigger沒有運行或發送正確的數據。插入後,更新觸發器沒有運行

我已經驗證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 

回答

2

有沒有在AFTER觸發的SET部分錯字?你將同樣的事情分成三個不同的變量。

而不是確認的Z_UpdateStageTable的行爲,我想嘗試的東西污垢簡單的(無參數的SQL語句,說)來代替它來測試是否被稱爲觸發的。這可能是因爲存儲過程中沒有被調用,你認爲它被調用。

1

等一下,如果用戶ID是你的PK則Z_MobileSyncFilters將尚未取得任何資料,這也是一個替代觸發

這wholw塊沒有做任何事情真的,你爲什麼需要這個觸發?

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

你第二個觸發是有缺陷的,因爲它會faile,如果你有一個多行操作

爲什麼你對這個表2 INSERT觸發器(1改爲1後)?

+0

的應用程序(不是我)有新的數據每次連接時間。不幸的是,該應用程序不夠智能執行更新,因此它試圖在連接時進行插入。沒有刪除它只能在第一次使用。 – NitroxDM 2009-02-24 19:11:13

+0

丹尼斯是正確的第二個觸發器是不正確的,如果多行插入發生,將無法正常工作。永遠不要只依靠在觸發器中插入/更新/刪除一行。 – HLGEM 2009-02-24 19:42:55

1

您可以添加PRINT語句來觸發和手動ManagementStudio /企業管理器插入,看看那裏的觸發失敗。

我看到一個問題,當你在一個單獨的語句插入多條記錄,作爲SELECT FROM Inserted將返回超過1分的紀錄。

您也可以更新SET聲明SELECT @Var = AllWos FROM Inserted

+0

SET語句的良好調用。該應用程序(不是我的)將只在時間插入一條記錄。我不擔心不止一行。 – NitroxDM 2009-02-24 19:04:46