0
所以我在插入触发器中有这个代码。基本上,当我尝试插入到atbl_sales_orderlines时,它会检查atbl_sales_products中是否有足够的数量来插入新订单。我想知道这是否可以以更有效的方式完成(也许使用更少的选择)。代码如下:简化T-SQL请求
BEGIN
IF (EXISTS (SELECT 1 FROM (
SELECT x.ProductId, totalOrdersQty, ISNULL(asp.Quantity, 0) PossibleQty FROM (
SELECT i.ProductId, sum(aso.Amount) totalOrdersQty
FROM (SELECT DISTINCT ProductId FROM inserted) i
JOIN atbl_Sales_OrdersLines aso ON aso.ProductId = i.ProductId
GROUP BY i.ProductId) x
LEFT JOIN atbl_Sales_ProductS asp ON asp.ProductId = x.ProductId
) x
WHERE PossibleQty < totalOrdersQty))
BEGIN
RAISERROR ('Quantity is not sufficient' ,18,1)
ROLLBACK TRANSACTION
END
END
P.S.我知道这样的事情应该在触发前完成。我正在为此进行学习。代码有效。
我觉得这个检查应插入到触发器表,这将避免不必要的IO –
我知道以前做过,但即时通讯这样做是为了学习目的。它需要在触发器中执行。 – Benua
许多选择并不意味着效率低下。 – Mihai