2013-03-18 94 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