2013-03-18 64 views
0

我是新創建觸發器。我試圖創建一個觸發器,用tblAccounts.HotNote更新tblServiceOrders.GeneralSymptoms,其中tblAccounts.Number = tblServiceOrders.AccountNumber,以及每當將新行添加到tblServiceOrders時。這是我到目前爲止。使用Where Filter創建更新觸發器

ALTER TRIGGER [dbo].[HOTNOTE_update] ON [dbo].[tblServiceOrders] 
AFTER INSERT 
AS 
BEGIN 
UPDATE tblServiceOrders tblAccounts.AccountNumber = tblServiceOrders.AccountNumber 

SET GeneralSymptoms = 
    (
SELECT HotNote FROM tblAccounts, tblServiceOrders 
WHERE tblAccounts.AccountNumber = tblServiceOrders.AccountNumber 
    ) 
FROM tblServiceOrders 
WHERE tblServiceOrders.SOType = 'BE Maintenance' OR tblServiceOrders.SOType = 'DD Maintenance' 
END 
+0

您正在使用哪種RDBMS? SQL Server(自dbo以來)... – sgeddes 2013-03-18 03:29:52

回答

0

假設你正在使用SQL Server,它看起來像你的UPDATE語句嘗試執行以下操作:

UPDATE so 
SET so.GeneralSymptoms = a.hotnote 
FROM tblServiceOrders so 
    JOIN tblAccounts a ON so.AccountNumber = a.AccountNumber 
WHERE so.SOType = 'BE Maintenance' 
    OR so.SOType = 'DD Maintenance' 

這將更新表中的所有記錄,這些匹配標準。您可能需要考慮只使用插入的記錄 - 取決於您的數據庫結構。

1

讀你的代碼,每當你插入一條記錄時,你都會更新整個表,這確實是很高的成本。我想你並不是真的想這樣做。如果您只想更新剛剛插入的記錄,那麼爲什麼不在插入前準備好數據並直接插入。

+0

如何才能使數據準備就緒並直接插入它?對不起,我真的很新,在這 – LordJubbles 2013-03-18 23:04:01

+0

請提供您的表格模式,插入腳本,給予更多描述你的目標是什麼,然後我很樂意提供幫助。 – 2013-03-19 04:08:38