mysql两句sql先后执行_MS SQL里,多条SQL语句是按顺序一一条的执行吗?

查询分析器里好像是按顺序一条一条的执行,但在数据库内部呢?我用的生产系统有一个BUG,就是物品档案里的编码进行统一转换时,会把所以数据表里用到某个编码的地方,全转换为新的编码...

查询分析器里好像是按顺序一条一条的执行,但在数据库内部呢?

我用的生产系统有一个BUG,就是物品档案里的编码进行统一转换时,会把所以数据表里用到某个编码的地方,全转换为新的编码,同时去掉老编码,偏偏漏掉了一个BOM表。所以我做了个简单的触发器。关系到4个表。

如下:BOM表和生产计划明细表各有一个触发器,如果有修改,调存储过程重新生成投产安排表,物品档案表里建一个简单触发器,当编码进行转换,软件在更新数据库其他表(包含有生产计划明细表和投产安排表)的物品编码时,物品档案中的触发器同时更新BOM表里的编码。但由于BOM中和生产计划明细表的触发器是在编码变化时,重新生成投产安排。因此,这里重复更新了投产安排。我的要求是不能由BOM和生产计划明细的触发器重新生成。

触发器如下:

CREATE Trigger [转换编码]

On 物料档案

for update

AS

if update(物品编码)

BEGIN

ALTER TABLE BOM DISABLE TRIGGER all --禁用BOM表上的触发器

ALTER TABLE 生产计划明细 DISABLE TRIGGER all ---禁用生产计划明细表上的触发器

------------------------以下开始进行编码转换操作------------

INSERT into 编码转换(物品编码,状态) SELECT 物品编码,'DEL' AS 状态 FROM deleted

INSERT into 编码转换(物品编码,状态) SELECT 物品编码,'INS' AS 状态 FROM inserted

update 投产安排 set 替代物料=INS.物品编码 from 投产安排,

(select 物品编码 from 编码转换 where 状态='INS') AS INS

where 投产安排.替代物料 in (select 物品编码 from 编码转换 where 状态='DEL')

update BOM set 子件编码=INS.物品编码 from BOM,

(select 物品编码 from 编码转换 where 状态='INS') AS INS

where BOM.子件编码 in (select 物品编码 from 编码转换 where 状态='DEL')

update BOM set 父件编码=INS.物品编码 from BOM,

(select 物品编码 from 编码转换 where 状态='INS') AS INS

where BOM.父件编码 in (select 物品编码 from 编码转换 where 状态='DEL')

update 车间领料明细 set DFS02=INS.物品编码 from 车间领料明细,

(select 物品编码 from 编码转换 where 状态='INS') AS INS

where 车间领料明细.DFS02 in (select 物品编码 from 编码转换 where 状态='DEL')

---------------------编码转换操作完毕----------------

ALTER TABLE BOM ENABLE TRIGGER all ----重新启用BOM表上的触发器

ALTER TABLE 生产计划明细 ENABLE TRIGGER all ----重新启用生产计划明细表上的触发器

delete from 编码转换---删除临时数据

end

我的方法是先禁用BOM和生产计划明细中的触发器,再做编码修改。然后重新启用BOM和生产计划明细中的触发器。

如果正常一条一条执行的话,应该是行得通的。但实际测试时,发现没达到预期效果。投产安排的重新生成的现象发生。也就是说,编码转换还没执行完时,禁用的触发器就被重新启用,然后调用存储过程去生成投产安排。

急。。。求解。本人只有80分了 T_T。。。哪位大侠解决了。全送。。

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值