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 –
を避けることができますどのトリガテーブルに挿入する前に行う必要があると感じますが、イムかかわらず、1つの派生テーブルを削除するために単純化することができます学習の目的でこれを行う。トリガで実行する必要があります。 – Benua
多くのSELECTSは効率的ではありません。 – Mihai