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

让一个表上的触发器使用一个存储过程返回的OUT参数
我在表rkdxm上建的一个触发器:
CREATE TRIGGER [rkc] ON dbo.rkdxm 
FOR INSERT
NOT for replication
AS
begin
if exists(select 1 from kc a inner join inserted b on a.ypID=b.ypID and a.rkdj=b.rkdj)
  update a set kcsl=a.kcsl+b.sl from kc a inner join inserted b on a.ypID=b.ypID and a.rkdj=b.rkdj
else
  insert into kc(ypID,kcsl,rkdj,xsdj) select ypID,sl,rkdj,xsdj from inserted
end
现在想把存储过程insert_rkd(作用是向表rkd插入一条数据,并用OUT参数返回产生的标识列的值)返回的OUT参数,
在这个触发器中使用,如果假设这个OUT参数是@ghs的话,那触发器我想改成:
CREATE TRIGGER [rkc] ON dbo.rkdxm 
FOR INSERT
NOT for replication
AS
begin
if exists(select 1 from kc a inner join inserted b on a.ypID=b.ypID and a.rkdj=b.rkdj and a.ghs=@ghs)
  update a set kcsl=a.kcsl+b.sl from kc a inner join inserted b on a.ypID=b.ypID and a.rkdj=b.rkdj and a.ghs=@ghs
else
  insert into kc(ypID,kcsl,rkdj,xsdj,ghsID) select ypID,sl,rkdj,xsdj,@ghs from inserted
end

大侠们,该怎样让@ghs传递给触发器使用。


------解决方案--------------------
LZ 如果你能建立一个存储过程处理这个过程,何不把触发器的处理也放到存储过程中作为一个事务进行处理呢?

库存累积, 如果使用触发器的话,开销比较大。


------解决方案--------------------
那就不要用存储过程了,直接在触发器里把rkd表带进去,看是否存在对应的。