更新新插入的記錄我想作出修改(集中刪除= 1)行插入我的表CustomerContact
如果SELECT
語句返回高於0.1MSSQL觸發 - 在INSERT
我有以下的,但還有待驗證:
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
聲明,我使用FROM INSERTED
,假設這將返回新插入的ID對於由插件形成記錄。
我對此聲明有兩個問題:
將把該語句的這部分執行剛插入
CustomerContact
的UPDATE
只是記錄 ?UPDATE CustomerContact SET Deleted = 1 WHERE CustomerContactID IN (SELECT CustomerContactID FROM INSERTED);
這是將被視爲正確的做出改變,以剛剛根據
SELECT
語句的結果插入行的方式嗎?
CustomerContactID
是一個自動遞增的主鍵列。
是否有執行每行的觸發方式? – Luke
好主意!我會給你一個答案 – Luke
你能解釋一下,如果插入多行,爲什麼OP的原始嘗試不起作用?我沒有看到它,他設置'@ numrows'其中'o.orderid IN(SELECT OrderID FROM INSERTED)'尋找'IF(@numrows> = 1)'並更新'Where CustomerContactID IN(SELECT CustomerContactID FROM INSERTED)它會在哪裏完全失敗?使用'JOIN's你的語法更漂亮;) – DrCopyPaste