0

私はトリガーを作成するのが初めてです。tblAccounts.Number = tblServiceOrders.AccountNumber で、tblServiceOrders に新しい行が追加されるたびに、tblAccounts.HotNote で tblServiceOrders.GeneralSymptoms を更新するトリガーを作成しようとしています。これが私がこれまでに得たものです。

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

UPDATESQL Server を使用していると仮定すると、ステートメントは次のことを実行しようとしているように見えます。

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'

これにより、テーブル内のすべてのレコードがこれらの一致基準で更新されます。挿入されたレコードのみを使用することを検討する必要がある場合があります-DB構造によって異なります。

于 2013-03-18T03:33:33.373 に答える