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