库存单据触发器的写法????

pbfan 2003-08-18 10:02:52
在单据审核时,要求根据单据明细表里的每条记录更新库存表的
对应的库存记录数量。
各表结构如下 :

单据主表:
CREATE TABLE [dbo].[OutputBill] (
[pm_rowid] [tdRowID] IDENTITY (1, 1) NOT NULL ,
[departmentID] [tdRowID] NOT NULL ,
[SendEmpID] [tdRowID] NOT NULL ,
[ReceiveEmpID] [tdRowID] NOT NULL ,
[OutBillCode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[OutType] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL ,
[OutDay] [datetime] NULL ,
[WareHouseCode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[WareHouseName] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[SunAmount] [decimal](12, 4) NULL ,
[SumMoney] [tdmoney] NULL ,
[WriteMan] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[WriteDay] [datetime] NULL ,
[LeaderDay] [datetime] NULL ,
[AccountMan] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[AccountDay] [datetime] NULL ,
[CheckDay] [datetime] NULL ,
[BillState] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL ,
[Accountant] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[Leader] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[remark] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[FirstPCode] [tFirstPCode] NULL
) ON [PRIMARY]
GO


明细表:
CREATE TABLE [dbo].[OutputBillDtl] (
[pm_rowID] [tdRowID] IDENTITY (1, 1) NOT NULL ,
[OutputBillID] [tdRowID] NULL ,
[EquipmentID] [tdRowID] NOT NULL ,
[EquReqDtlID] [tdRowID] NULL ,
[RequestAmount] [decimal](12, 4) NULL ,
[CheckAmount] [decimal](12, 4) NULL ,
[OutAmount] [decimal](12, 4) NULL ,
[OutPrice] [tdmoney] NULL ,
[purpose] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL ,
[isMain] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL ,
[remark] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
库存表:
CREATE TABLE [dbo].[Storage] (
[pm_rowID] [tdRowID] NOT NULL ,
[FirstPCode] [tFirstPCode] NOT NULL ,
[MendDay] [datetime] NULL ,
[HouseCode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[Place] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[StockPrice] [tdmoney] NULL ,
[BeginAmount] [decimal](12, 4) NULL ,
[HighAmount] [decimal](12, 4) NULL ,
[LowAmount] [decimal](12, 4) NULL ,
[InAmount] [decimal](12, 4) NULL ,
[OutAmount] [decimal](12, 4) NULL ,
[ComeBackAmount] [decimal](12, 4) NULL ,
[GoBackAmount] [decimal](12, 4) NULL ,
[DamnifyAmount] [decimal](12, 4) NULL ,
[LoseAmount] [decimal](12, 4) NULL ,
[StorageAmount] [decimal](12, 4) NULL
) ON [PRIMARY]
GO

关联关系:
OutputBill.pm_rowid=OutputBillDtl.OutputBillID
OutputBillDtl.EquipmentID=Storage.pm_rowid
...全文
88 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pbfan 2003-08-19
  • 打赏
  • 举报
回复
想来想去,还是写在程序里面算啦。。。
愉快的登山者 2003-08-19
  • 打赏
  • 举报
回复
不用触发器,使用存储过程:
create procedure p1 (int @pm_rowid)
as
update Storage set StorageAmount = StorageAmount - outAmount
from (select EquipmentID, sum(outAmount) from OutputBillDtl
where OutputBillID = @pm_rowid) group by EquipmentID) A
where Storage.pm_rowID = A.EquipmentID
go


愉快的登山者


◢◣◢◣◢◣
polugen 2003-08-19
  • 打赏
  • 举报
回复
直接连接就可以了
txlicenhe 2003-08-19
  • 打赏
  • 举报
回复
为什么不自己动手试试呢?你一定行的。

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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