从来没有用过触发器,想向各位讨教一个实例来学习。
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.CREATE TABLE [生产日报] (
        [日期] [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
      

  2.   

    2.
    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
      

  3.   

    libin_ftsafe 速度真快!我才浏览两个贴子你就回复了三篇了。赞!我知道第二个问题也可以像这样用视图的,但我想能够用这两个实例来学习一下触发器,你能不能帮我写出来呢?
      

  4.   

    天啊,libin_ftsafe 是不是CSDN设的高级机器人啊,怎么这么快,我好好研究一下,谢谢!!