CREATE TRIGGER T_WL_WLRK_UPDATE ON dbo.T_WL_WLRK
FOR UPDATE
ASDECLARE @o_rkdh CHAR(11) --旧的入库单号
DECLARE @n_rkdh CHAR(11) --新的入库单号
DECLARE @o_wlbh CHAR(13) --旧的物料编号
DECLARE @n_wlbh CHAR(13) --新的物料编号
DECLARE @o_djlx VARCHAR(10) --旧的单据类型
DECLARE @n_djlx VARCHAR(10) --新的单据类型
DECLARE @o_djbh CHAR(11) --旧的单据编号
DECLARE @n_djbh CHAR(11) --新的单据编号
DECLARE @o_jyph CHAR(11) --旧的检验批号
DECLARE @n_jyph CHAR(11) --新的检验批号
DECLARE @n_ckh CHAR(11) --仓库号DECLARE @o_sl DECIMAL(18,4) --旧的入库数量
DECLARE @n_sl DECIMAL(18,4) --新的入库数量
DECLARE @sl DECIMAL(18,4) --现有库存数量
DECLARE @qr bit /*当前记录是否被结存*/BEGIN TRANSACTIONSELECT @o_rkdh=入库单号, @o_wlbh=物料编号, @o_djlx=单据类型, @o_djbh=单据编号, @o_jyph=检验批号, @o_sl=入库数量,@qr=确认 FROM deleted
SELECT @n_rkdh=入库单号, @n_wlbh=物料编号, @n_djlx=单据类型, @n_djbh=单据编号, @n_jyph=检验批号, @n_sl=入库数量,@n_ckh=仓库号 FROM inserted--结存确认后的数据不能被修改
/******主要就是以下这段******/
IF @qr=1
BEGIN
RAISERROR('数据已结存,您不能再修改',16,1)
ROLLBACK
RETURN
END
COMMIT TRANSACTION
FOR UPDATE
ASDECLARE @o_rkdh CHAR(11) --旧的入库单号
DECLARE @n_rkdh CHAR(11) --新的入库单号
DECLARE @o_wlbh CHAR(13) --旧的物料编号
DECLARE @n_wlbh CHAR(13) --新的物料编号
DECLARE @o_djlx VARCHAR(10) --旧的单据类型
DECLARE @n_djlx VARCHAR(10) --新的单据类型
DECLARE @o_djbh CHAR(11) --旧的单据编号
DECLARE @n_djbh CHAR(11) --新的单据编号
DECLARE @o_jyph CHAR(11) --旧的检验批号
DECLARE @n_jyph CHAR(11) --新的检验批号
DECLARE @n_ckh CHAR(11) --仓库号DECLARE @o_sl DECIMAL(18,4) --旧的入库数量
DECLARE @n_sl DECIMAL(18,4) --新的入库数量
DECLARE @sl DECIMAL(18,4) --现有库存数量
DECLARE @qr bit /*当前记录是否被结存*/BEGIN TRANSACTIONSELECT @o_rkdh=入库单号, @o_wlbh=物料编号, @o_djlx=单据类型, @o_djbh=单据编号, @o_jyph=检验批号, @o_sl=入库数量,@qr=确认 FROM deleted
SELECT @n_rkdh=入库单号, @n_wlbh=物料编号, @n_djlx=单据类型, @n_djbh=单据编号, @n_jyph=检验批号, @n_sl=入库数量,@n_ckh=仓库号 FROM inserted--结存确认后的数据不能被修改
/******主要就是以下这段******/
IF @qr=1
BEGIN
RAISERROR('数据已结存,您不能再修改',16,1)
ROLLBACK
RETURN
END
COMMIT TRANSACTION
解决方案 »
- 如何获得最大值的时间?
- 急求sql语句!!
- 关于mmc.exe 错误的问题,在线等高手回答!!!!
- 菜鸟问题:下面这种情况可能吗?在线结贴
- 求助!!SQL Server安装不了
- 求教,如何将其他服务器上的数据库备份,恢复在本地计算机上?在线,急
- 存储过程中返回的RECORDSET不支持BOOKMARK??!
- 请问在触发器中如何给存储过程传参数并执行(传入的参数为当前修改的ID号)急!!!
- 如何用vb代码把sql数据库查询的结果集插入到access库的一张表
- help,help,help.在SQL SERVER7.0中创建连接服务器时老是出错。
- 请教满足这个要求的是什么数据类型
- 一个触发器问题,请进
这样你再试一下~~
IF @qr=1
begin
ROLLBACK
RAISERROR('数据已结存,您不能再修改',16,1)
RETURN
END
COMMIT TRANSACTION
是的,我就想当确认字段为1时不允许再修改.什么样表结构对触发器会有影响?TO:iwl()
肯定有符合条件的数据,因为用带WHERE子句修改部分记录时也会触发,而不带WHERE时却不触发了.TO: wangdehao(找找找)
您能谈谈如何写触发器,才能很好解决批量UPDATE的问题,这方面我不太了解,谢谢!我奇怪的是,同样触发器用在其他表上,一点问题都没有.不知这该做何解释.
deleted表里的确认字段都是1,所以SELECT @o_rkdh=入库单号, @o_wlbh=物料编号, @o_djlx=单据类型, @o_djbh=单据编号, @o_jyph=检验批号, @o_sl=入库数量,@qr=确认 FROM deleted
SELECT @n_rkdh=入库单号, @n_wlbh=物料编号, @n_djlx=单据类型, @n_djbh=单据编号, @n_jyph=检验批号, @n_sl=入库数量,@n_ckh=仓库号 FROM inserted这2个语句可以取得结果 @qr=1
当你用 UPDATE T_WL_WLCK SET 确认 = 0 时,你是对整个表进行update,这时deleted表 和inserted的表里就不是一条记录了,而是包含多个记录,也就是说deleted表的"确认"字段可能是1也可能是别的数值,而按你的sql,@qr应该是取得deleted表里的最后一条记录的"确认"(第一条还是最后条记录我也不是很确定),所以可能引不起触发不知道这样讲你明白吗?建议了解一下update触发器的过程,以及inserted,deleted 表里的数据
出库单号 发货单号 物料号 检验批号 出库数量
接收单位 出库日期 备注 操作者 仓库号 确认
W2004120015 Q2004120020 3.604.160.15 E2003120105 6000 7016 2004-12-9 0:00 NULL ZRD 3 1
W2004120034 Q2004120043 3.604.160.15 E2003120105 1106 7016 2004-12-16 0:00 NULL zrd 3 1
W2004120034 Q2004120043 3.604.160.15 E2004120088 894 7016 2004-12-16 0:00 NULL zrd 3 1
W2005010002 Q2004120081 3.604.160.15 E2004120088 606 7016 2005-12-29 0:00 NULL ZRD 3 0
W2005010002 Q2004120081 3.604.160.15 E2004120151 4394 7016 2005-12-29 0:00 NULL ZRD 3 0
W2005020002 Q2005010103 3.604.160.15 E2004120151 3672 7016 2005-1-28 0:00 NULL zrd 3 1
W2005020002 Q2005010103 3.604.160.15 E2005010133 10000 7016 2005-1-28 0:00 NULL zrd 3 1
W2005020002 Q2005010103 3.604.160.15 E2005010138 12000 7016 2005-1-28 0:00 NULL zrd 3 1
W2005020002 Q2005010103 3.604.160.15 E2005010145 13000 7016 2005-1-28 0:00 NULL zrd 3 1
W2005020002 Q2005010103 3.604.160.15 E2005010151 6328 7016 2005-1-28 0:00 NULL zrd 3 1
W2005010025 Q2005010010 3.604.160.16 E2005010010 2000 7000 2005-1-5 0:00 NULL zrd 3 1
W2005010026 Q2005010014 3.604.160.16 E2005010010 3000 7000 2005-1-6 0:00 NULL zrd 3 1
W2005010026 Q2005010014 3.604.160.16 E2005010018 5000 7000 2005-1-6 0:00 NULL zrd 3 1
入库单号 物料数量 单据类型 单据编号 入库数量 入库日期
仓库号 检验批号 存放位置 加工状态 备注 现存数量 操作者 确认
U2004120306 3.604.050.7 随工单 O2004120315 13000 2004-12-18 0:00 3 E2004120098 * NULL NULL 0 zrd 1
U2005010005 3.604.050.7 随工单 O2004120316 8000 2005-12-30 0:00 3 E2004120162 * NULL NULL 0 ZRD 0
U2005020010 3.604.050.7 随工单 O2005010304 10000 2005-1-28 0:00 3 E2005010158 * NULL NULL 0 zrd 1
U2005020021 3.604.050.7 随工单 O2005020301 15000 2005-1-31 0:00 3 E2005010177 * NULL NULL 0 zrd 1
U2004110300 3.604.050.7 随工单 O2004110312 15000 2004-11-12 0:00 3 E2004110064 * NULL NULL 0 zrd 1
U2004120028 3.604.050.7 随工单 O2004120302 13000 2004-11-30 0:00 3 E2004110177 * NULL NULL 0 zrd 1
U2004120120 3.604.050.7 随工单 O2004120304 7000 2004-12-2 0:00 3 E2004120007 * NULL NULL 0 zrd 1
instead of UPDATE
AS
if exists(select * from deleted where 确认 = 1)
begin
ROLLBACK
RAISERROR('数据已结存,您不能再修改',16,1)
RETURN
end
谢谢,之前一直以为修改一条触发一次,inserted,deleted 表中只会有一条记录,现在我明白了.