SQL Server FOR / AFTER触发器

时间:2014-04-29 17:08:32

标签: sql-server triggers

我的作业有问题。我相信我的代码都已正确完成,但我一直收到一个语法错误,说该列" 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. */

1 个答案:

答案 0 :(得分:0)

据我了解,您使用的是SQL Server作为您的RDBMS,如果我在下面的查询中没有错误Total是列别名,则您无法使用column alias where条款。这就是错误的原因。

请参阅此处的示例小提示,以便您理解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