触发器取值问题。

cairg 2005-02-22 01:55:33
CREATE TRIGGER Tr_CpphdUpdateuser ON dbo.cp_warephd
FOR Insert,Delete,update AS /////////////系统先做insert操作再作delete操作
declare @i_zfbj varchar(2)
declare @d_zfbj varchar(2)
If Exists(Select * From Deleted)
begin
select top 1 @d_zfbj=isnull(d.zfbj,'8') from deleted d
--Raiserror (@d_zfbj,16,1)
end
If Exists(Select * From Inserted I)
Begin
select @i_zfbj=isnull(i.zfbj ,'8') from inserted i
-- Raiserror (@i_zfbj,16,1)/////做insert操作时取出值是2
end

If Exists(Select * From Deleted)
作delete操作@i_zfbj变成了空值,有没有什么好方法把值保存起来
Begin
/*更新可使用仓库库存量*/
-- Raiserror (@i_zfbj,16,1)
Update Cp_WareCkkc
Set usequantity= (Cp_WareCkkc.usequantity + (Select D.Quantity))
From Deleted D
Where Cp_WareCkkc.WareHouse= D.WareHouse And Cp_WareCkkc.systemcode = D.systemcode
and (@d_zfbj='2' ) and @i_zfbj='2'//////////@i_zfbj=''所以我无法正确执行,我希望是@i_zfbj=2
end
...全文
120 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cairg 2005-02-22
  • 打赏
  • 举报
回复
哎,还是不行。。谢谢各位,时间较紧,还是先写到前台再说了。
cairg 2005-02-22
  • 打赏
  • 举报
回复
为了明显起见我加上去的。


所以你这个触发器只要用于update操作就可以了

用Update到是好注意。。我去试试看。。
pbsql 2005-02-22
  • 打赏
  • 举报
回复
逻辑有点问题,实际上改为一句即可:
Update Cp_WareCkkc Set usequantity=usequantity+t.Quantity
from
(
select isnull(i.zfbj,d.zfbj) zfbj,
isnull(i.WareHouse,d.WareHouse) WareHouse,
isnull(i.systemcode,d.systemcode) systemcode,
isnull(i.Quantity,0)-isnull(d.Quantity,0) Quantity
from inserted i full join deleted d
on i.zfbj=d.zfbj and i.WareHouse=d.WareHouse and i.systemcode=d.systemcode
) t
Where zfbj=t.zfbj and WareHouse=t.WareHouse And systemcode=t.systemcode
zheninchangjiang 2005-02-22
  • 打赏
  • 举报
回复
最后一个if判断改为
if (@d_zfbj='2' ) and @i_zfbj='2'
Update Cp_WareCkkc
Set usequantity= (Cp_WareCkkc.usequantity + (Select D.Quantity))
From Deleted D
Where Cp_WareCkkc.WareHouse= D.WareHouse And Cp_WareCkkc.systemcode = D.systemcode
zheninchangjiang 2005-02-22
  • 打赏
  • 举报
回复
你的意图是什么,不太清楚
如果是delete和insert操作时,那么触发器中的最后一行的条件就永远不能满足:
(@d_zfbj='2' ) and @i_zfbj='2'
所以你这个触发器只要用于update操作就可以了
cairg 2005-02-22
  • 打赏
  • 举报
回复
这个我知道啊。。但可以控制先让数据库处理delete再处理insert啊。我问的是否能像PB中一样用一个全局变量存起来。再使用
zheninchangjiang 2005-02-22
  • 打赏
  • 举报
回复
SQLSERVER没有这样的注释
Qihua_wu 2005-02-22
  • 打赏
  • 举报
回复
insert和delete操作是不会同时发生的,所以你的逻辑有点问题

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧