SQL Server FOR/AFTER trigger



我有一个赋值问题。我相信我已经把代码全部处理好了,但我一直收到语法错误,说"Total"列不存在。我的印象是,当你使用"AS"时,它会重命名你试图使用的列。

这是我的代码,任何指针都将不胜感激。

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

以下是本作业的指导。

/* 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. */

据我所知,您正在使用SQL Server作为RDBMS,如果我在下面的查询中没有错的话,Total是列别名,您不能在where子句中使用column alias。这就是为什么错误是针对的。

请在此处查看样品小提琴以便于理解http://sqlfiddle.com/#!3/f902c/1

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

相反,你可以使用下面的派生表来完成

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