因无人回,再发一贴:看看我的存贮过程哪句错了,有关临时表的。(可读性应该不差)

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

我把代码写下来了。老师请看:(把临时表换成普通表则正常执行)  
  set   quoted_identifier   off    
  go  
  set   ansi_nulls   on    
  go  
  --汇总部门数据,生成财务报表  
  alter                                                         proc   bmhz  
  @yuefen   char(7)   =   null  
  as  
  if   (@yuefen   is   null)  
      begin  
          raiserror(没输入月份,5,5)  
          return  
      end  
  if   len(@yuefen)   <>   6  
      begin  
          raiserror(您输入月份位数不正确,应为6位,5,5)  
          return  
      end  
  ----以下是汇总正式工的程序  
  delete   #hzzsg  
  --go  
  insert   into   #hzzsg   (月份,部门,误餐费,回补,独补,卫生费,月奖,电话费,小计,保险费,医保,公积金,会费,应扣,税额,扣款小计,正式工资,人数)  
      select   月份,部门,sum(误餐费),sum(回补),sum(独补),sum(卫生费),sum(月奖),sum(电话费),sum(小计),sum(保险费)  
      ,sum(医保),sum(公积金),sum(会费),sum(应扣),sum(税额),sum(扣款小计),sum(实发工资),count(*)     --count(*)为计算人数  
      from   gz  
      where   月份   =   @yuefen   and   len(临特标记)   =   0  
      group   by   月份,部门  
  --go  
  update   #hzzsg   set   工资其余   =   (小计-误餐费-回补-独补-卫生费-月奖-电话费)  
   
  ---下面是汇总临时工  
  --go  
  delete   ##hzlsg  
  --go  
   
  insert   into   ##hzlsg   (月份,部门,误餐费,回补,独补,卫生费,月奖,电话费,临时工小计,保险费,医保,公积金,会费,应扣,临时工税额,扣款小计,临扣款小计,临时工应扣,临特工资,临时工数)  
      select   月份,部门,sum(误餐费),sum(回补),sum(独补),sum(卫生费),sum(月奖),sum(电话费),sum(小计),sum(保险费)  
      ,sum(医保),sum(公积金),sum(会费),sum(应扣),sum(税额),sum(扣款小计),sum(扣款小计),sum(应扣),sum(实发工资),count(*)     --count(*)为计算人数  
      from   gz  
      where   月份   =   @yuefen   and   (   临特标记   =   *   or   临特标记   =   #)  
      group   by   月份,部门  
   
  --如有重月的则删除  
  delete   cw   where   月份   =   @yuefen  
   
  --下面导入部门工资表的月份和部门,导入财务汇总表  
  insert   into   cw   (月份,部门,部门名称,部门标志,分配标志,property)  
      select   @yuefen,部门,部门名称,部门标志,分配标志,property  
          from   yfbmda   where   月份   =   @yuefen  
   
   
   
  --下面从月部门数据中导入数据  
  --部门应发就是部门工资计提数  
  update   cw   set   部门应发   =   bm.部门应发,补贴工资   =   bm.补贴工资,其他增加   =   bm.增加,其他减少   =   bm.减少  
      from   cw   left   join   bm   on   (cw.月份   =   bm.月份   and   cw.部门   =   bm.部门)  
   
  --下面处理正式工  
   
  update   cw    
      set   误餐费   =   #hzzsg.误餐费,回补=   #hzzsg.回补,独补   =   #hzzsg.独补,卫生费   =   #hzzsg.卫生费  
        ,月奖   =   #hzzsg.月奖,工资其余   =   #hzzsg.工资其余,电话费   =   #hzzsg.电话费,小计   =   #hzzsg.小计,保险费   =   #hzzsg.保险费  
        ,医保   =   #hzzsg.医保,公积金   =   #hzzsg.公积金,会费   =   #hzzsg.会费,应扣   =   #hzzsg.应扣,税额   =   #hzzsg.税额  
        ,扣款小计   =   #hzzsg.扣款小计,正式工资   =   #hzzsg.正式工资,人数   =   #hzzsg.人数  
      from   cw   left   join   #hzzsg   on   (cw.月份   =   #hzzsg.月份   and   cw.部门   =   #hzzsg.部门)  
              where   cw.月份   =   @yuefen       ---   临特标记   =   space(2)  
   
  --下面处时临时工  
   
  update   cw  
      set   电话费   =   cw.电话费   +   isnull(##hzlsg.电话费,0),临时工小计   =   ##hzlsg.临时工小计,临时工税额   =   ##hzlsg.临时工税额  
      ,临扣款小计   =   ##hzlsg.临扣款小计,临特工资   =   ##hzlsg.临特工资,临时工数   =   ##hzlsg.临时工数,临时工应扣   =   ##hzlsg.临时工应扣  
      from   cw   left   join   ##hzlsg   on   (cw.月份   =   ##hzlsg.月份   and   cw.部门   =   ##hzlsg.部门)  
            where   cw.月份   =   @yuefen  
  --去除高雷记录  
  delete   cw   where     月份   =   @yuefen   and   (   部门   =   27)              
   
  */  
  --部门其他就是部门结余,二者意思完全相同  
  --部门标志:1为科室,2为车间  
  --只有车间涉及到部门结余问题  
  update   cw   set   部门其他   =     (isnull(部门应发,0)-isnull(正式工资,0)-isnull(临特工资,0)-isnull(扣款小计,0)+isnull(补贴工资,0)+isnull(其他增加,0)-isnull(其他减少,0))  
  where     月份   =   @yuefen   and     部门标志=2  
  go  
  set   quoted_identifier   off    
  go  
  set   ansi_nulls   on    
  go  
 

.

· 网友精彩回答:

处理 SSI 文件时出错
© 2006-2008 All Rights Reserved