J'ai donc ce code dans le déclencheur d'insertion. Fondamentalement, quand j'essaie d'insérer à atbl_sales_orderlines, il vérifie s'il y a suffisamment de quantité dans atbl_sales_products pour insérer un nouvel ordre. Je me demandais si cela pourrait être fait d'une manière plus efficace (peut-être en utilisant moins SELECTS). Code ci-dessous:Simplifier la requête 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. Je sais qu'une telle chose devrait être faite avant le déclenchement. Je fais cela à des fins d'apprentissage. Le code fonctionne.
Je pense que ce contrôle doit faire avant de l'insérer dans la table de déclenchement qui permettra d'éviter l'inutile IO –
Je sais, mais im le faire à des fins d'apprentissage. Il doit être effectué dans le déclencheur. – Benua
Beaucoup de SELECTS ne veut pas dire inefficace. – Mihai