繁体   English   中英

SQL触发器在更新时不起作用

[英]SQL Trigger not working upon update

我有以下代码(在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

触发器要做的是将“当前库存”与“重新订购水平”列进行比较,如果“当前库存”的值等于或小于“重新订购水平”,它将在“重新订购”列中输入“是”,如果不是,那么它将放置一个No值。

触发器本身在语法上看起来是正确的。 但是,我认为这不是一个性能不错的解决方案,因为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM