2017-05-13 6 views
0

Ich möchte den Trigger ausgelöst, wenn ich mehrere Werte und selbst wenn sie wie diese dupliziert einfügen:Ausführen eines Triggers?

Unter der Annahme, dass die Werte waren 0 (Table_1):

Einsetzen der Werte oben (während nachdem der Auslöser erstellt) geben soll uns:

Es funktioniert jedoch gut, wenn der Wert der gekauften 99 für „Prod1“ zum Beispiel ist und ich laufe:

in Bezug auf Prod2, es ist nicht überhaupt aus dem einfachen Grunde zu aktualisieren, da Prod1 eine hatte Beschränkungsfehler

+0

Nur neugierig Warum wählen Sie diese Logik auf dem DB-Server? Dies scheint Geschäftslogik zu sein, die auf der Anwendungsseite behandelt werden sollte. Das Verwenden eines Triggers, um das erwartete Einfügeverhalten zu ändern, hat ein bisschen Code-Geruch für mich. –

+0

Kein besonderer Grund wirklich, ich bin nur erlaubt, SQL zu benutzen, und ich versuche, die gegebenen Probleme zu lösen, indem ich wie verlangt SQL benutze. –

Antwort

3

Sie IIF oder eine CASE nutzen könnten, um die Grenze Sie müssen Kappe: UPSERT

UPDATE T1 
SET Bought = IIF((Bought + uc.UpdCount) < 100, Bought + uc.UpdCount, 100) 
FROM TABLE_1 T1 
JOIN (
    SELECT ProdName, COUNT(*) as UpdCount 
    FROM Inserted 
    GROUP BY ProdName 
) uc ON uc.Name = T1.ProdName 
WHERE T1.Bought < 100; 

Mit einer MERGE Anweisung, dann wäre es in etwa so aussehen:

MERGE TABLE_1 AS t 
USING (
    SELECT ProdName, COUNT(*) as UpdCount 
    FROM Inserted 
    GROUP BY ProdName 
) AS s (Name, UpdCount) ON (t.ProdName = s.Name) 
WHEN MATCHED THEN 
    UPDATE SET Bought = IIF((t.Bought + s.UpdCount) < 100, t.Bought + s.UpdCount, 100) 
WHEN NOT MATCHED THEN 
    INSERT (ProdName, Bought) VALUES (s.Name, IIF(s.UpdCount < 100, s.UpdCount, 100)); 
Verwandte Themen