Könnten Sie mir bitte helfen, meinen Auslöser zu beenden. Was ich bisher bekommen habe:SQL Insert-Trigger-Bedingung Anweisung und mehrere Zeilen
CREATE TRIGGER [dbo].[atbl_Sales_OrdersLines_ITrigGG]
ON [dbo].[atbl_Sales_OrdersLines]
FOR INSERT
AS
BEGIN
DECLARE @ID INT = (SELECT ProductID
FROM INSERTED)
DECLARE @OrderedQ INT = (SELECT SUM(Amount)
FROM atbl_Sales_OrdersLines
WHERE ProductID = @ID)
DECLARE @CurrentQ INT = (SELECT Quantity
FROM atbl_Sales_Products
WHERE ProductID = @ID)
DECLARE @PossibleQ INT = (SELECT Amount
FROM INSERTED
WHERE ProductID = @ID)
IF (@CurrentQ - @OrderedQ >= @PossibleQ)
ELSE
END
Ich muss den Code vervollständigen. Ich kann nicht herausfinden, wie es geht. Ich brauche das, wenn Bedingung erfüllt ist - Auslöser würde den Einsatz erlauben. Anderenfalls würde der Trigger das Einfügen/Zurücksetzen stoppen und eine Meldung anzeigen, dass die Menge nicht ausreicht.
Funktioniert dieser Code auch, wenn mehrere Zeilen mit verschiedenen Produkt-IDs eingefügt werden?
Danke.
Die Antwort auf Ihre letzte Frage ist ** nein **, es wird nicht funktionieren, wenn die Einfügung mehrere Zeilen mit verschiedenen Produkt-IDs ist. Die ersten zwei Zeilen, in denen Sie '@ id' festlegen, können nur eine Produkt-ID aus allen productIds in 'eingefügten' Zeilen erfassen. Also, alles danach arbeitet mit einer Teilmenge der Wahrheit. – hatchet
Nein, das ist ein sehr schlechter Code. Wenn mehrere Zeilen eingefügt werden, wählt es zum Beispiel eine ID aus (die letzte von SELECT). Es ignoriert alle anderen. Alle Trigger müssen in einer Satzschreibweise geschrieben werden, die annimmt, dass in den eingefügten (und/oder gelöschten) Sammlungen mehrere Zeilen vorhanden sind. Jedes Mal, wenn Sie eine skalare Variable wie hier deklarieren, ist es eine rote Flagge. Dies wird nie funktionieren für das, was Sie versuchen zu tun. – pmbAustin
Irgendwelche Vorschläge? Ich mache eine Übung für Lernzwecke, es ist kein wirkliches Projekt. Darüber hinaus wird die gesamte Bestellung zurückgewiesen, wenn einem oder mehreren Produkten die Menge fehlt. – Benua