Foxtable(狐表)用户栏目专家坐堂 → 触发器中if update多个字段怎么写?


  共有1673人关注过本帖树形打印复制链接

主题:触发器中if update多个字段怎么写?

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17116 威望:0 精华:0 注册:2014/7/29 19:09:00
触发器中if update多个字段怎么写?  发帖心情 Post By:2017/4/17 11:46:00 [只看该作者]

比如想写
Create TRIGGER [dbo].[trup_cgrk]
ON [dbo].[采购入库明细]
AFTER UPDATE
AS
BEGIN
   IF UPDATE(数量),update(品质判断) 
    .....
感觉不对,这种情形怎么写才正确!谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/17 11:57:00 [只看该作者]

 直接用if就行啊。

 

 if 条件1 and 条件2

 

 if 条件1 or 条件2

 


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17116 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/4/17 17:33:00 [只看该作者]

Create TRIGGER [dbo].[trup_cgrk]
ON [dbo].[采购入库明细]
AFTER UPDATE
AS
BEGIN
   IF UPDATE(数量) or update(品质判断) 
       --更新库存数量
    UPDATE 库存表
    CASE WHEN b.品质判定 = '合格' AND a.品质判定 = IS null THEN
     S ET 合格数量 = 合格数量 + a.数量-b.数量,待检数量 = b.待检数量 - b.数量
    FROM inserted a INNER JOIN Deleted b ON a._Identify = b._Identify 
   CASE WHEN ................    then
    s et 
   .......

如上就是想表达根据更改前后不同的品质判定来更新不同的库存数量,但这种分支写法不可以,要怎么写才可以呢?
谢谢!




 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/17 17:37:00 [只看该作者]

你语法有问题,需要 update set 合格数量 = (这里写条件语句)

 

https://www.baidu.com/baidu?wd=update+case+when&tn=monline_4_dg&ie=utf-8

 


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17116 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/4/17 17:58:00 [只看该作者]

网络上的set field1=(case when type='A' then 'X' else filed1 end) 都是用于指定确定的值,
我是想实现表case when 不同的条件,然后执行不同的sq语句,就像foxtable中的select case那样
case A
upate 表a set ........
case B
insert into 表C...........
只是想用类似case when这样只需查询执行一次就就可以根据不同的条件执行完,这样不能实现吗?
用if else if那样是可以,但每次都要去重新根据条件查询


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/17 18:04:00 [只看该作者]

 你是无法判断表里面每一行的值的。

 

 你可以写几条update或insert语句,条件加在后面,只有这种方法。


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17116 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2017/4/17 18:19:00 [只看该作者]

这样吗:
update 库存表 C
se t 合格数量 = 合格数量 + a.数量 from (inserted a inner join deleted b on a._identify = b._Identiry inner join 库存表 c ....
 where a.品质判定 = '合格' and b.品质判定 = '选别'  

那不同的排列组合值都要写一条sql语句,用在触发器中会不会效率很低,或者导致有其他问题?

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/17 21:11:00 [只看该作者]

 没办法,是只能这样处理的。

 

 你update语句设置值的时候,可以用case when语句的。update、insert分开写,两句不就行了?


 回到顶部