Ich bin neu in SQL Server und löst aus. Ich habe einen vorhandenen Auslöser, den ich anpassen muss. Es gibt zwei Tabellen Produkte (die die Gesamtmenge der Produkte im Bestand enthält. Menge) und OrdersLines (die alle Informationen über Aufträge enthält. Eine Beispielzeile hätte OrderID, ProductID und Betrag) Wenn ich ein Produkt bestelle Betrag ist reserviert. Ich brauche den Trigger, um zu überprüfen, ob die neue bestellte Menge nicht über die Menge hinausgeht. Wenn dies der Fall ist, werfen Sie RAISERROR, wenn nicht, lassen Sie die Transaktion weiterlaufen.Einfügen/Update-Trigger in SQL-Server, um Werte zu überprüfen
Ich habe Probleme mit der Identifizierung der Gesamtzahl der Bestellung, um die Menge auf Lager zu überprüfen.
Trigger ist für OrdersLines Tabelle ich von etwas entlang der Linien zu tun, dachte:
IF EXISTS ((SELECT *
FROM Products AS p
JOIN inserted AS i
ON p.ProductID = i.ProductID
JOIN OrdersLines AS o
ON p.ProductID = o.ProductID
WHERE (SUM(o.Amount) + i.Amount) <= p.Quantity)
BEGIN
GOTO ContinueTransaction
END ELSE BEGIN
GOTO RollbackTransaction
END
aber ich denke, das ist nicht richtig. Auch in ELSE brauche ich RAISERROR, um zu informieren, dass die Bestellung nicht hinzugefügt wurde, aber ich bin mir nicht sicher, wie. Es gibt Argumente, die ich im Moment darlegen muss und die mich verwirren.
doesnt eingefügt Tisch bestehen nur aus eingeführt (neu) Reihen? Oder mit anderen Worten, es hat keine Zeilen, die vor dem Einfügen existierten? edit: und würde auch nicht Beispiel Rollback-Transaktion, wenn es genug von Artikeln auf Lager sind? und auch, wenn es nicht zu viel ist, warum "16, 1"? – NulisDefo
Ja, aber es hat alle Spalten, einschließlich derjenigen, die Sie nicht geändert haben. Und aktualisieren Sie nicht die Menge in der Tabelle Produkte nach dem Einfügen der Bestellung? Wenn Sie es sind, dann müssen Sie nur sicherstellen, dass diese neuen Bestellungen die * aktuelle * Menge nicht überschreiten, oder? –
Und es rollt nur zurück Transaktion, wenn die Summe der Menge in eingefügten (neuen) Bestellungen die aktuelle Menge überschreitet. Der Rollback befindet sich innerhalb des Begin-End-Blocks, der davon abhängig ist, dass das Existiert ist. –