我写的这个触发器为什么不起作用啊~~
--当Update basevoyage时同时update voyage中的数据
ALTER trigger tr_Update
on basevoyage
for update
as
declare @services varchar(30)
declare @vessel varchar(2)
declare @week varchar(4)
select @services=a.services,@vessel=b.vesselcode,@week=b.[week]
from deleted a
inner join voyage b on a.services=b.services
exec p_voyage @services,@vessel,@week
也就是说:我要实现这样的功能:
当对表basevoyage进行update时,就要执行这个存储过程p_voyage,这个存
储过程有三个参数@services ,@vessel ,@week ,
要取得这三个参数的值,然后去 exec p_voyage @services,@vessel,@week
这样写不起作用啊!
在trriger里面怎样执行存储过程啊??
------解决方案--------------------用print把值打出来试下.是否有值.如有值应该是你存储过程的问题
------解决方案--------------------1、更新直接写在触发器中就可以了
2、确实要写在存储过程中这样写语法上没有错误
3、给参数赋值看是否能执行成功不成是存储过程问题,成功可能是参数没有获得值
------解决方案--------------------1、首先确认存储过程没问题
2、触发器这样写只适合每次更新一条记录的情况。
2、批更新的时候,要用游标将参数提取出来,分别执行储存过程。
------解决方案--------------------ALTER trigger tr_Update
on basevoyage
for update
as
declare @services varchar(30)
declare @vessel varchar(2)
declare @week varchar(4)
/*
select @services=a.services,@vessel=b.vesselcode,@week=b.[week]
from deleted a
inner join voyage b on a.services=b.services
exec p_voyage @services,@vessel,@week
*/
select a.services,b.vesselcode,b.[week]
from deleted a
inner join voyage b on a.services=b.services
--就这样,看看你取得参数如何。