1. 程式人生 > >sql 存在即更新不存在則插入的另一種寫法

sql 存在即更新不存在則插入的另一種寫法

CREATE PROCEDURE [dbo].[P_ExtensionLinkCount]
@BeginDate date
AS
BEGIN
    declare @Now date,
            @Yesterday date, -- 昨天
            @IsRefresh int   -- 是否更新某欄位 1更新 0不更新

    set @Now=GETDATE()
    set @Yesterday=DATEADD(day,-1,@Now)
    set @IsRefresh=0

    if @BeginDate = @Now or @BeginDate
= @Yesterday begin set @IsRefresh=1 end -- 更新指定日期(@BeginDate)資料 ;with c1 as( -- 此處省略複雜邏輯 select * from t1 where State=1 ) MERGE INTO t2 as target USING c1 as source ON (target.id=source.id and target.date=source.date)
WHEN MATCHED THEN -- 存在則更新 UPDATE -- 如果是當天 則更新欄位 否則不更新某欄位 SET target.c1= case when @IsRefresh=1 then source.c1 else target.c1 end, target.c2= case when @IsRefresh=1 then source.c2 else target.c2 end, target.c3= source.c3, target.c4= source.c4, target.c5
= source.c5, target.c5= source.c6, target.c7= source.c7, target.c8=source.c8 WHEN NOT MATCHED THEN -- 不存在則插入 INSERT (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10) VALUES (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10); END

- 僅記錄sql結構與寫法,列名與表名已經抹掉;