請幫我完成觸發器。我到目前爲止:SQL插入觸發條件語句和多行
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
我需要完成代碼。無法弄清楚如何去做。我需要,如果條件滿足 - 觸發器將允許插入。否則,觸發器將停止插入/或回滾,並提示消息數量不足。
此外,如果插入是多行不同的產品ID,此代碼將工作嗎?
謝謝。
最後一個問題的答案是** no **,如果插入是多行不同產品ID,則不起作用。設置「@ id」的前兩行只能從「插入」行中的所有productId中捕獲單個產品ID。所以,之後的所有事情都與真相的一部分有關。 – hatchet
不,這是非常糟糕的代碼。如果插入多行,則只選擇一個ID(例如來自SELECT的最後一個)。它忽略了所有其他的。所有觸發器都需要以集合表示法編寫,假設插入(和/或刪除)集合中將存在多行。任何時候你在這裏聲明一個標量變量,它都是一個紅旗。這對於你正在嘗試做的事情將永遠不會起作用。 – pmbAustin
有什麼建議嗎?我爲了學習的目的而進行鍛鍊並不是一個實際的項目。此外,如果整個訂單在一個或多個產品缺少數量時被拒絕,那麼很好。 – Benua