使用Where Filter创建更新触发器

时间:2013-03-18 03:25:39

标签: sql triggers

我是创建触发器的新手。我正在尝试使用tblAccounts.HotNote创建一个更新tblServiceOrders.GeneralSymptoms的触发器,其中tblAccounts.Number = tblServiceOrders.AccountNumber以及每当向tblServiceOrders添加新行时的位置。这是我到目前为止所做的。

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

2 个答案:

答案 0 :(得分:1)

读取代码,每次插入记录时,都会更新整个表格,这是非常高的成本。我想你真的不想那样做。如果您只想更新刚刚插入的记录,那么为什么不在插入之前使数据准备就绪并直接插入。

答案 1 :(得分: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'

这将使用这些匹配条件更新表中的所有记录。您可能需要考虑仅使用插入的记录 - 取决于您的数据库结构。