![](/img/trans.png)
[英]Pl/ SQL update trigger to update the ranking upon an update operation on a table
[英]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.