0

我是创建触发器的新手。我正在尝试创建一个触发器,该触发器使用 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
4

2 回答 2

1

读你的代码,每插入一条记录,你就会更新整个表,成本真的很高。我猜你并不想这样做。如果您只想更新刚刚插入的记录,那么为什么不在插入之前准备好数据并直接插入。

于 2013-03-18T04:04:56.140 回答
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'

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

于 2013-03-18T03:33:33.373 回答