金碟k3+SQL,触发器

hz03zhuhaowen 2008-07-01 03:09:15
BOS单“文具入库单”生成“外购入库单”“其他出库单”“虚仓入库单”为了保证“文具入库单”与三张工业单的数据完整性,我做了个触发器。如下:

IF EXISTS (SELECT name

FROM sysobjects

WHERE name = N'twobills'

AND type = 'TR')

DROP TRIGGER twobills

GO

CREATE TRIGGER twobills

ON t_BOSWJRKEntry

FOR INSERT,UPDATE

AS


IF COLUMNS_UPDATED()=0xC8010000

Begin

update SE

set SE.FItemID = WJ.FMaterialCode,SE.FAuxQty = WJ.FFactAccQty,SE.Fauxprice = WJ.FPrice,SE.FAmount = WJ.FAmount

from inserted WJ inner join ICStockbillEntry SE on WJ.FID=SE.FSourceInterID and WJ.FIndex=SE.FSourceEntryID

print 'triggers are finished'


End


其中“0xC8010000”是通过以下触发器得到


IF EXISTS (SELECT name

FROM sysobjects

WHERE name = N'tr_test'

AND type = 'TR')

DROP TRIGGER tr_test

GO

CREATE TRIGGER tr_test

ON t_BOSWJRKEntry

FOR INSERT,UPDATE

As

Begin

print COLUMNS_UPDATED()

end

这些完成之后,我在SQL查询分析器里可以达到我要的效果,即更新t_BOSWJRKEntry的指定的字段的值时,相关联的单据的对应 字段值也能相应更新。但是,我直接在金碟“文具入库单”单据体里更新字段值时,其它相关联的单据的对应字段值就没有反应了。
...全文
377 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
CREATE trigger icstockbill_check --实现对物料单据管控 on Icstockbill for insert as Declare @Ftrantype int --单据类别定义/生产领料单24/调拔单41/销售出库单21 Select @Ftrantype=Ftrantype from inserted --控制领料单的领料日期不能小于生产任务单的计划开工日期 倒扣物料只能车间仓库发料 if (@Ftrantype=24) begin declare @icmo varchar(20) declare @message varchar(200) declare @message0 varchar(200) declare @message00 varchar(200) declare @message000 varchar(200) declare @finterid240 int set @message='错误!领料日期不能小于生产任务单计划开工日期,请与生管人员联系!错误单号:' set @message0='生产领料单发料仓库不正确,倒扣物料不能从 原料仓/半成品仓/成品仓 发料' set @message00='已完工生产任务单不能跨月领料.请检查领料日期!' set @message000='生产领料单必需关联源生产任务单号,请重新录入单据!' if exists ( select t1.fbillno from inserted as t1 inner join icstockbillentry as t2 on t2.finterid=t1.finterid where t2.ficmointerid=0 ) begin RAISERROR(@message000,18,18) ROLLBACK end if exists( select t3.fbillno from inserted as t1 inner join icstockbillentry as t2 on t2.finterid=t1.finterid inner join icmo as t3 on t3.finterid=t2.fsourceinterid where t2.fsourceinterid>0 and t1.fdate0 and t1.fdateCast(year(max(t4.fdate)) as int(10))*100+Cast(month(max(t4.fdate)) as int(5)) ) begin RAISERROR(@message00,18,18) ROLLBACK end --更新领料单上的销售订单号 select @finterid240=finterid from inserted update t2 set t2.fentryselfb0445=t4.fbillno from icstockbill as t1 inner join icstockbillentry as t2 on t1.ftrantype=24 and t1.finterid=t2.finterid inner join icmo as t3 on t3.finterid=t2.ficmointerid left join seorder as t4 on t4.finterid=t3.forderinterid where isnull(t4.fbillno,'no')'no' and t2.finterid=@finterid240 return end --控制委外加工生产任务单领料日期不对小于计划开工日期 if (@Ftrantype=28) begin declare @icmo3 varchar(20) declare @message3 varchar(200) set @message3='错误!委外加工发出日期不能小于对应委外加工生产任务单计划开工日期,请与采购人员联系变更!错误单号:' if exists( select t3.fbillno from inserted as t1 inner join icstockbillentry as t2 on t2.finterid=t1.finterid inner join icmo as t3 on t3.finterid=t2.fsourceinterid where t2.fsourceinterid>0 and t1.fdate0 and t1.fdate0 and t1.fdate0 and t1.fdate

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧