2014-04-29 3 views
0

J'ai un problème avec une affectation. Je crois que j'ai le code tout a fonctionné correctement mais je continue à obtenir une erreur de syntaxe en disant que la colonne "Total" n'existe pas. J'avais l'impression que lorsque vous avez utilisé "AS", il a renommé la colonne que vous essayez d'utiliser.Déclencheur SQL Server FOR/AFTER

Voici mon code tout pointeur serait grandement apprécié.

Use [IST278EagleCorp13-1] 

Go 

Alter Trigger DPInvOrderTrigger 
On InventoryPart 
For insert 
As 
If exists (Select Count(ReorderLevel * 4) ReorderLevel,Count(StockOnOrder + StockLevel) AS Total 
From InventoryPart 
Where Total > ReorderLevel) 
Begin 
    RaisError('Inventory to low. Transaction failed.',16,1) 
    rollback tran 
    End 

Voici les instructions pour cette affectation.

/* Create a FOR|AFTER trigger named xxInvOrderTrigger for updates 
    to the InventoryPart table. If an update produces a record where 
    the (stockOnOrder + stockLevel) > (4 * reorderLevel) raise an 
    error (display an error) and rollback the change. */ 
+0

Triggers sont ** très ** spécifiques au fournisseur - donc s'il vous plaît mettre à jour vos tags pour nous dire quelle ** base de données ** (et quelle version) vous utilisez (SQL est juste la langue de requête - pas une base de données) –

Répondre

0

Pour ma compréhension que vous utilisez SQL Server comme SGBDR et si je ne me trompe pas dans votre requête ci-dessous Total est un alias de colonne et vous ne pouvez pas utiliser column alias dans where clause. C'est pourquoi l'erreur est pour.

Voir un violon exemple ici pour votre compréhension http://sqlfiddle.com/#!3/f902c/1

Select Count(ReorderLevel * 4) ReorderLevel, 
Count(StockOnOrder + StockLevel) AS Total 

vous pouvez plutôt le faire en utilisant le tableau ci-dessous comme dérivé

select ReorderLevel, 
Total 
from 
(
Select Count(ReorderLevel * 4) ReorderLevel, 
Count(StockOnOrder + StockLevel) AS Total, 
ReorderLevel 
From InventoryPart 
) tab 
Where Total > ReorderLevel 
+0

hmmm ok merci de retour à la case un je suppose = ( – user3380392

+0

@ user3380392, voir édité répondez à nouveau – Rahul

+0

Merci pour votre aide, je pense que je l'ai compris. comme il se avère que je n'ai pas besoin du "compte" soit heh je apprécie l'aide si je vous remercie – user3380392

Questions connexes