以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求教,sql语句与触发器相关问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=24367)

--  作者:baoxyang
--  发布时间:2012/10/11 22:40:00
--  求教,sql语句与触发器相关问题

Dim sql1 As String = "UPDATE {库存表} set 单据号 =  Case WHEN ID = "& sql &" Then \'"& s6 &"\' Else 单据号 End ,虚存量 = Case WHEN 虚存量 <= "& s5 &" And ID = "& sql &" Then  0  WHEN 虚存量 > "& s5 &" And ID = "& sql &" Then 虚存量 - "& s5 &" Else 虚存量 End "
cmd.CommandText = sql1
cmd.ExecuteNonQuery() > 0

 

在表中建立一个UPdate关联表触发器时,有一列数据发生数据变化了.但inserted与deleted两个临时表中的数据怎会一致呢?


--  作者:飞
--  发布时间:2012/10/11 22:46:00
--  
把触发器代码贴出来
--  作者:baoxyang
--  发布时间:2012/10/11 23:05:00
--  

USE [buchang]
GO
/****** 对象:  Trigger [dbo].[拣货]    脚本日期: 10/11/2012 22:46:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[拣货] ON [dbo].[库存表]
For  UPDATE
AS
    if Update(虚存量)
       begin
            Update 拣货表
            set 实拣量 = 实拣量 + c.虚存量 - b.虚存量,库存ID = b.ID,储位 = b.储位
            from 拣货表 a,Inserted b,deleted c
            where a.单据号 = b.单据号 and b.单据号 = c.单据号 and a.储位 = \'\' and a.商品代号 = b.商品代号 and b.商品代号 = c.商品代号 and a.货主代号 = b.货主代号 and b.货主代号 = c.货主代号
       end

最后结果实拣量为0,其实虚存量有数据变化.

[此贴子已经被作者于2012-10-11 23:06:21编辑过]

--  作者:baoxyang
--  发布时间:2012/10/11 23:08:00
--  

如果把set 实拣量 = 实拣量 + c.虚存量 - b.虚存量,库存ID = b.ID,储位 = b.储位
修改1:set 实拣量 = 实拣量 + c.虚存量 ,库存ID = b.ID,储位 = b.储位


修改2:set 实拣量 = 实拣量 + b.虚存量 ,库存ID = b.ID,储位 = b.储位

这两种情况数据一样的.


--  作者:飞
--  发布时间:2012/10/12 9:02:00
--  

你在一楼sql语句中修改的是单据号的字段

但是在触发器里面的条件是针对更新虚存量的


--  作者:baoxyang
--  发布时间:2012/10/12 10:03:00
--  
以下是引用在2012-10-12 9:02:00的发言:

你在一楼sql语句中修改的是单据号的字段

但是在触发器里面的条件是针对更新虚存量的

单据号及虚存量都有修改.第二个when case 是修改虚存量的.


--  作者:飞
--  发布时间:2012/10/12 14:00:00
--  
把第三行的 > 0去掉看看