从来没有用过触发器,想向各位讨教一个实例来学习。
1.用户在输入生产日报的时候,自动累计到当天为止的累计生产数,如:
日期 工序 产品 生产数 累计
1/1 A 杯子 100 100
1/2 A 杯子 50 150
2/3 A 杯子 60 210 即通过触发器得到累计字段值2.出货单包括主档和明细两个数据表,如:
主档:
单号 出货日期 总数量 总金额
001 1/1 1800 4400 明细:
产品 数量 金额
杯子 1000 2000
盘子 800 2400 即通过触发器自动得到总数量和总金额以下是应用的表:
生产日报表:CREATE TABLE [生产日报] (
[日期] [datetime] NULL ,
[工序] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[产品] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[生产数] [int] NULL ,
[累计] [int] NULL
) ON [PRIMARY]
insert 生产日报
select 2009/1/1,'A','杯子',100,NULL union all
select 2009/1/2,'A','杯子',50,NULL union all
select 2009/1/3,'A','杯子',60,NULL union all
select 2009/1/3,'A','盘子',200,NULL union all
select 2009/1/4,'A','杯子',70,NULL union all
select 2009/1/4,'A','盘子',360,NULL GO
出货单主档:
CREATE TABLE [出货单主档] (
[单号] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[出货日期] [datetime] NULL ,
[总数量] [int] NULL ,
[总金额] [int] NULL
) ON [PRIMARY]
insert 出货单主档
select '001','2009/1/1',Null,NullGO
出货单明细
CREATE TABLE [出货单明细] (
[单号] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[产品] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[数量] [int] NULL ,
[金额] [int] NULL
) ON [PRIMARY]
insert 出货单明细
select '001','杯子',1000,2000 union all
select '001','盘子',800,2400
GO
1.用户在输入生产日报的时候,自动累计到当天为止的累计生产数,如:
日期 工序 产品 生产数 累计
1/1 A 杯子 100 100
1/2 A 杯子 50 150
2/3 A 杯子 60 210 即通过触发器得到累计字段值2.出货单包括主档和明细两个数据表,如:
主档:
单号 出货日期 总数量 总金额
001 1/1 1800 4400 明细:
产品 数量 金额
杯子 1000 2000
盘子 800 2400 即通过触发器自动得到总数量和总金额以下是应用的表:
生产日报表:CREATE TABLE [生产日报] (
[日期] [datetime] NULL ,
[工序] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[产品] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[生产数] [int] NULL ,
[累计] [int] NULL
) ON [PRIMARY]
insert 生产日报
select 2009/1/1,'A','杯子',100,NULL union all
select 2009/1/2,'A','杯子',50,NULL union all
select 2009/1/3,'A','杯子',60,NULL union all
select 2009/1/3,'A','盘子',200,NULL union all
select 2009/1/4,'A','杯子',70,NULL union all
select 2009/1/4,'A','盘子',360,NULL GO
出货单主档:
CREATE TABLE [出货单主档] (
[单号] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[出货日期] [datetime] NULL ,
[总数量] [int] NULL ,
[总金额] [int] NULL
) ON [PRIMARY]
insert 出货单主档
select '001','2009/1/1',Null,NullGO
出货单明细
CREATE TABLE [出货单明细] (
[单号] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[产品] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[数量] [int] NULL ,
[金额] [int] NULL
) ON [PRIMARY]
insert 出货单明细
select '001','杯子',1000,2000 union all
select '001','盘子',800,2400
GO
[日期] [datetime] NULL ,
[工序] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[产品] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[生产数] [int] NULL ,
[累计] [int] NULL
) ON [PRIMARY]
insert 生产日报
select '2009/1/1','A','杯子',100,NULL union all
select '2009/1/2','A','杯子',50,NULL union all
select '2009/1/3','A','杯子',60,NULL union all
select '2009/1/3','A','盘子',200,NULL union all
select '2009/1/4','A','杯子',70,NULL union all
select '2009/1/4','A','盘子',360,NULL select t.日期,t.工序,t.产品,t.生产数,(select sum(生产数) from 生产日报 where 产品=t.产品 and 工序=t.工序 and 日期<=t.日期) as 累计 from 生产日报 t
/*
日期 工序 产品 生产数 累计
------------------------------------------------------ -------------------- -------------------- ----------- -----------
2009-01-01 00:00:00.000 A 杯子 100 100
2009-01-02 00:00:00.000 A 杯子 50 150
2009-01-03 00:00:00.000 A 杯子 60 210
2009-01-03 00:00:00.000 A 盘子 200 200
2009-01-04 00:00:00.000 A 杯子 70 280
2009-01-04 00:00:00.000 A 盘子 360 560
*/
GOdrop table 生产日报
go
CREATE TABLE [出货单主档] (
[单号] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[出货日期] [datetime] NULL ,
[总数量] [int] NULL ,
[总金额] [int] NULL
) ON [PRIMARY]insert 出货单主档 select '001','2009/03/23',Null,Null
GOCREATE TABLE [出货单明细] (
[单号] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[产品] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[数量] [int] NULL ,
[金额] [int] NULL
) ON [PRIMARY]
GOCREATE TRIGGER TRG_TEST ON 出货单明细 FOR INSERT
AS
BEGIN
UPDATE a
SET
总数量=b.数量,
总金额=b.金额
FROM
出货单主档 a,(SELECT SUM(数量) AS 数量,SUM(金额) AS 金额 FROM INSERTED) b
WHERE
DATEDIFF(DD,GETDATE(),a.出货日期)=0
END
GOinsert 出货单明细
select '001','杯子',1000,2000 union all
select '001','盘子',800,2400
GOSELECT * FROM 出货单主档
/*
单号 出货日期 总数量 总金额
-------------------------------------------------- ------------------------------------------------------ ----------- -----------
001 2009-03-23 00:00:00.000 1800 4400
*/
godrop TRIGGER TRG_TEST
drop table 出货单主档,出货单明细
go