ステートメントが 0 を超える値を返すCustomerContact
場合、テーブルに挿入される行を変更 (Set Deleted = 1) したいと考えています。SELECT
私は以下を持っていますが、テストされていません:
CREATE TRIGGER mark_cust_contact_deleted ON CustomerContact
AFTER INSERT AS
BEGIN
DECLARE @numrows INT;
/* Determine if order matches criteria for marking customer contact as DELETED immediately */
SELECT @numrows = COUNT(*)
FROM [Order] o
JOIN OrderMeterDetail om
ON o.OrderID = om.OrderID
WHERE o.WorkTypeID = 3 AND o.WorkActionID = 26 AND o.WorkStageID IN (109, 309, 409)
AND om.MeterDetailTypeID = 1 AND om.MeterLocationID IN (2, 4)
AND o.orderid IN (SELECT OrderID FROM INSERTED);
/* If the order matches the criteria, mark the customer contact as deleted */
IF (@numrows >= 1)
UPDATE CustomerContact
SET Deleted = 1
WHERE CustomerContactID IN (SELECT CustomerContactID FROM INSERTED);
END
IF
私のステートメント内では、挿入によって作成されたレコードの新しく挿入された IDFROM INSERTED
が返されると仮定して、 を使用しています。
この声明について 2 つの質問があります。
ステートメントのこの部分は、
UPDATE
挿入されたばかりのレコードを実行しCustomerContact
ますか?UPDATE CustomerContact SET Deleted = 1 WHERE CustomerContactID IN (SELECT CustomerContactID FROM INSERTED);
SELECT
これは、ステートメントの結果に基づいて挿入されたばかりの行に変更を加えるのに正しいと見なされる方法ですか?
CustomerContactID
自動インクリメント主キー列です。