日期:2014-05-18  浏览次数:20518 次

-----一个简单的触发器问题-------
CREATE   trigger   t_updateStoLoc   on   symix_tbl_PO
for   update
as
begin
update   Shelf_Table  
set   Shelf_Table.NewSto   =   symix_tbl_PO.sto,Shelf_Table.NewLoc   =   symix_tbl_PO.Loc
from   inserted   symix_tbl_PO
where   Shelf_Table.MaterielNo=symix_tbl_PO.MaterielNo   and     Shelf_Table.LotNo=symix_tbl_PO.LotNo   and   Shelf_Table.ShelfType   =   0    
end

上面的触发器要实现的是,
当symix_tbl_PO中的sto和Loc更新时即(update   symix_tbl_PO   set   sto= 'aaa ',Loc= 'bbb 'where   id=100),
Shelf_Table的NewSto和NewLoc也同时更新,
条件是   Shelf_Table.MaterielNo=symix_tbl_PO.MaterielNo   and     Shelf_Table.LotNo=symix_tbl_PO.LotNo   and   Shelf_Table.ShelfType   =   0  

问题:写好了上面这个触发器,检查语法显示成功
但是却一直是编辑状态(就是显示一支笔在那里)。  
正常可以用的   应该是一个绿色的+号啊!现在这个触发器一直不起作用,
请问怎样才能使这个触发器正常工作呢?触发器哪里有错吗?!!!

------解决方案--------------------
LZ的触发条件好象都没有...
------解决方案--------------------
问题:写好了上面这个触发器,检查语法显示成功
但是却一直是编辑状态(就是显示一支笔在那里)。

___________________________________________________

一支笔在那里表示这个触发器是更新触发器,即是由update语句触发的,
绿色加号的触发器是insert触发器,是由insert语句触发的,
另外:红色叉号是delete语句触发器

CREATE trigger t_updateStoLoc on symix_tbl_PO
for update

楼主定义的触发器不就是update语句触发的么?
触发器不起做用,楼主应该另找原因
------解决方案--------------------
CREATE trigger t_updateStoLoc on symix_tbl_PO
for update
as
begin
update Shelf_Table
set NewSto = t.sto,NewLoc = t.Loc
from inserted t
where MaterielNo=t.MaterielNo and LotNo=t.LotNo and ShelfType = 0
end

---这样试试
------解决方案--------------------
create table t_test

(
a int ,
b int ,
c int

)
insert t_test(a,b,c) values(4,4,5)

create trigger t_t on t_test
for update
as
begin
if update (b)

update t_test set c=t2.b
from t_test t1 inner join inserted t2 on t1.a=t2.a

end


update t_test set b=7
where a=4


drop table t_test

------解决方案--------------------
inserted symix_tbl_PO不要把inserted表的另名和实表名一样