SQL触发器在更新时无法正常工作

时间:2014-10-15 14:35:31

标签: sql sql-server triggers set where

我有以下代码(在sql server中 - 通过2012):我似乎无法正确使用它。有什么建议。

表:

select top 1000 [supplier],
                [item],
                [reorder_level],
                [current_inventory],
                [reorder],
from [clinic].[dbo].[emr_suppliers]

我正在制作一个触发器并且有点卡住了。

CREATE TRIGGER reorder_supplies
ON emr_suppliers
After insert, update 
As BEGIN

update  emr_suppliers
set reorder = 'yes' 
where (emr_suppliers.reorder = emr_suppliers.current_inventory or emr_suppliers.reorder > emr_suppliers.current_inventory)

update  emr_suppliers
set reorder = 'no' 
where emr_suppliers.reorder < emr_suppliers.current_inventory

END

触发器必须做的是将当前库存与重新订购级别列进行比较,如果当前库存的值等于或小于重新订购级别,它将在重新订购列中添加值Yes,如果不是,那么它将改为No值。

1 个答案:

答案 0 :(得分:1)

触发器本身看起来语法正确。 但是,我不认为它是一个具有良好性能的解决方案,因为emr_suppliers表的每一行都被触摸两次,即使大多数行根本没有数据更改(例如插入之后)新行或单个值的更新。)

我使用基于内部插入表的解决方案以及CASE表达式:

UPDATE  emr_suppliers
SET reorder = 
    CASE WHEN emr_suppliers.reorder <  emr_suppliers.current_inventory THEN 'no'
         WHEN emr_suppliers.reorder >= emr_suppliers.current_inventory THEN 'yes'
    ELSE reorder -- don't change the value
    END
FROM emr_suppliers INNER JOIN inserted ON emr_suppliers.primary_key = inserted.primary_key