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

我写的这个触发器为什么不起作用啊~~
--当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

--就这样,看看你取得参数如何。