有这样一个需求(关于人员维护) 
在维护人员(如增加,删除,更新资料)前先把人员信息提出来 
在我需要更新资料,或删除时,语句应怎么写(现在我用的是触发器) SQL code--供应商客户维护存储过程  
create proc [dbo].[gysk_wh]           
  @gzid varchar(20),--可不管
  @djlxbs varchar(3) --可不管
asif not exists(select * from gyskh_wh where sslx=@sslx)    ---判断是否是初次维护
  begin
    insert into gyskh_wh(cw_bh,cw_mc,sslx)--CW_BH即编号,为主健,CW_MC人员名称,
     select cw_bh,cw_mc,sslx
      from tmp_dj_GKW555(nolock) where gzid=@gzid     --tmp_dj_GKW555在应用程序中单据的临时表,如增一条人员信息,自动往临时表插入一条
  end  
else
begin
  begin  --drop table #bb
       select cw_bh,cw_mc,sslx,username,lastmodifytime into #bb
         from tmp_dj_GKW555 a(nolock)
           where  not exists(select * from gyskh_wh(nolock) where SSLX=A.SSLX AND CW_BH=A.CW_BH)
         insert into gyskh_wh(cw_bh,cw_mc,sslx,username,lastmodifytime)
            select cw_bh,cw_mc,sslx,username,lastmodifytime from #bb
  end
end
--考虑到更新名称(以下这段不太好,你什么办法)
update a set a.cw_mc=b.cw_mc
  from gyskh_wh a(nolock),tmp_dj_GKW555  b(nolock)
  where a.sslx=b.sslx and a.cw_bh=b.cw_bh and b.gzid=@gzidgo

解决方案 »

  1.   

    我知道楼主是什么意思?
    楼主的意思是开单时把所有的数据插入到临时表里面,在应用程序在删除一条记录时,从对应的原始表中删除对应的记录
    楼主现在用触发器来完成,想改成在存储过程中用一条SQL语句完成, 
    不知楼主是否是这个意思
      

  2.   

    create proc [dbo].[gysk_wh]          
      @gzid varchar(20),--可不管 
      @djlxbs varchar(3) --可不管 
    as if not exists(select * from gyskh_wh where sslx=@sslx)    ---判断是否是初次维护 
      begin 
        insert into gyskh_wh(cw_bh,cw_mc,sslx)--CW_BH即编号,为主健,CW_MC人员名称, 
        select cw_bh,cw_mc,sslx 
          from tmp_dj_GKW555(nolock) where gzid=@gzid    --tmp_dj_GKW555在应用程序中单据的临时表,如增一条人员信息,自动往临时表插入一条 
      end  
    else 
    begin 
      begin  --drop table #bb 
          select cw_bh,cw_mc,sslx,username,lastmodifytime into #bb 
            from tmp_dj_GKW555 a(nolock) 
              where  not exists(select * from gyskh_wh(nolock) where SSLX=A.SSLX AND CW_BH=A.CW_BH) 
            insert into gyskh_wh(cw_bh,cw_mc,sslx,username,lastmodifytime) 
                select cw_bh,cw_mc,sslx,username,lastmodifytime from #bb 
      end 
    end 
    --考虑到更新名称(以下这段不太好,你什么办法) 
    update a set a.cw_mc=b.cw_mc 
      from gyskh_wh a(nolock),tmp_dj_GKW555  b(nolock) 
      where a.sslx=b.sslx and a.cw_bh=b.cw_bh and b.gzid=@gzidgo 
    没什么优化的..