--conditions :Source #std :destination table :#destination` primary keys are id and episode. --if #stg.Determination_Code=#destination.Determination_Code update only srtf.fields. #destination.Assessment_Status(date) remains the same --2)if #stg.Determination_Code<>#destination.Determination_Code update all fields including #destination.Assessment_Status . --b) If it does not, update all valu drop table #stg create table #stg ( [id] [varchar](20) NULL, [episode] [int] NULL, [Assessment_Status] [date] NULL, [Determination_Code] [varchar](40) NULL, [Determination] [varchar](40) NULL, [SRTF_Status_Code] [varchar](40) NULL, [SRTF_Status_Value] [varchar](40) NULL, [Days_SRTF] [int] NULL, [dss_create_time] [datetime] NULL, [dss_update_time] [datetime] NULL ) insert into #stg values('200',2,'2022-03-24','1','Ready to Place','Yes','Yes',20,getdate (),getdate()) select * from #stg create table #dimension( [dim_key] [int] IDENTITY(1,1) NOT NULL, [id] [varchar](20) NULL, [episode] [int] NULL, [Assessment_Status] [date] NULL, [Determination_Code] [varchar](40) NULL, [Determination] [varchar](40) NULL, [SRTF_Status_Code] [varchar](40) NULL, [SRTF_Status_Value] [varchar](40) NULL, [Days_SRTF] [int] NULL, [dss_create_time] [datetime] NULL, [dss_update_time] [datetime] NULL, CONSTRAINT [dim_idx_0] PRIMARY KEY CLUSTERED ( [dim_key] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) insert into #dimension values('200','2','2018-09-19','1','Ready to Place','Yes','Yes',20,getdate (),getdate()) select * from #dimension -----attempted solution below MERGE INTO #dimension USING ( SELECT #stg.id AS patid , #stg.episode AS episode , #stg.Assessment_Status AS Assessment_Status , #stg.Determination_Code AS Determination_Code , #stg.Determination AS Determination , #stg.SRTF_Status_Code AS SRTF_Status_Code , #stg.SRTF_Status_Value AS SRTF_Status_Value , #stg.Days_SRTF AS Days_SRTF FROM #stg #stg ) AS changes ON ( #dimension.id = changes.id AND #dimension.episode = changes.episode ) WHEN MATCHED THEN UPDATE SET --- Assessment_Status = changes.Assessment_Status --, Determination_Code = changes.Determination_Code , Determination = changes.Determination , SRTF_Status_Code = changes.SRTF_Status_Code , SRTF_Status_Value = changes.SRTF_Status_Value , Days_SRTF = changes.Days_SRTF , dss_update_time = getdate() WHEN NOT MATCHED THEN INSERT ( id , episode , Assessment_Status , Determination_Code , Determination , SRTF_Status_Code , SRTF_Status_Value , Days_SRTF , dss_create_time , dss_update_time ) VALUES ( id , episode , Assessment_Status , Determination_Code , Determination , SRTF_Status_Code , SRTF_Status_Value , Days_SRTF ,getdate() ,getdate() );