以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  触发器中if update多个字段怎么写?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99317)

--  作者:happyft
--  发布时间:2017/4/17 11:46:00
--  触发器中if update多个字段怎么写?
比如想写
Create TRIGGER [dbo].[trup_cgrk]
ON [dbo].[采购入库明细]
AFTER UPDATE
AS
BEGIN
   IF UPDATE(数量),update(品质判断) 
    .....
感觉不对,这种情形怎么写才正确!谢谢!

--  作者:有点色
--  发布时间:2017/4/17 11:57:00
--  

 直接用if就行啊。

 

 if 条件1 and 条件2

 

 if 条件1 or 条件2

 


--  作者:HappyFt
--  发布时间: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 
   .......

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




--  作者:有点色
--  发布时间: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
--  发布时间: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那样是可以,但每次都要去重新根据条件查询


--  作者:有点色
--  发布时间:2017/4/17 18:04:00
--  

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

 

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


--  作者:HappyFt
--  发布时间: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语句,用在触发器中会不会效率很低,或者导致有其他问题?

--  作者:有点色
--  发布时间:2017/4/17 21:11:00
--  

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

 

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