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