首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

小弟我写的这个触发器为什么不起作用啊

2012-03-07 
我写的这个触发器为什么不起作用啊~~--当Updatebasevoyage时同时updatevoyage中的数据ALTERtriggertr_Upda

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

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

热点排行