SQL Server 实现有记录就更新,没有就插入

想了半天就想到了触发器来实现,不过自己感觉效率不高,
那位大侠路过请指点一下哟~~~


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [dbo].[HWHD_UPD] ON [dbo].[hwhd]
   INSTEAD OF  INSERT
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

    SET NOCOUNT ON;
 SET XACT_ABORT ON
 SET ANSI_NULLS ON
 SET ANSI_WARNINGS ON

 declare @hwhd_Tmp table (COMCD varchar(10),AUFNR varchar(18)
       ,WODAT varchar(8)
       ,MATNR varchar(30)
       ,WOSTA varchar(1)
       ,MENGE numeric(20,5)
       ,MEINS varchar(3)
       )

 insert into @hwhd_Tmp
 select inserted.COMCD,inserted.AUFNR,inserted.WODAT
  ,inserted.MATNR,inserted.WOSTA,inserted.MENGE,inserted.MEINS
 from inserted INNER JOIN [hwhd]
  ON inserted.COMCD=[hwhd].COMCD and inserted.AUFNR = [hwhd].AUFNR

 begin
  INSERT [hwhd](COMCD,AUFNR,WODAT,MATNR,WOSTA,MENGE,MEINS)
  SELECT COMCD,AUFNR,WODAT,MATNR,WOSTA,MENGE,MEINS
  from inserted
 end

 begin
  update [hwhd]
  set COMCD=hwh.COMCD,AUFNR=hwh.AUFNR,WODAT=hwh.WODAT,MATNR=hwh.MATNR
   ,WOSTA=hwh.WOSTA,MENGE=hwh.MENGE,MEINS=hwh.MEINS
   ,CHDAT=convert(varchar(8),getdate(),112)
  from @hwhd_Tmp As hwh
  where [hwhd].COMCD = hwh.COMCD and  [hwhd].AUFNR = hwh.AUFNR
 end

END

 

posted on 2008-06-17 12:43  LongSky  阅读(709)  评论(0编辑  收藏  举报

导航