I’ve two tables like:
Table1
x
-----------------------------------------
TID1 Name Status LastStatus
-----------------------------------------
1 A 1 3
Table2
-----------------------------------------
TID2 TID1 oDate Status
-----------------------------------------
1 1 2020-04-01 1
2 1 2020-04-03 2
3 1 2020-04-05 3
The scenario is: If I update the Table2
on TID2 = 2
, the LastStatus
on Table1
shouldn’t be updated because there’s a MAX Date on Table2
with TID1=1
. So LastStatus
on Table1
will only updated if there’s an update on Table2
with MAX Date.
Currently, I only work on Table2
. It doesn’t effect to Table1
. Below are my code:
-- Insert Statement
Declare @TID1 int, @oDate DateTime, @Status int;
Set @TID1 = 1;
Set @oDate = '2020-04-05';
Set @Status = 3;
Insert into Table2 (TID1, oDate, Status) values (@TID1, @oDate, @Status)
-- Update Statement (Example only - if there's a row to be updated)
Update Table2 Set TID1=@TID1, oDate=@oDate, Status=@Status
where TID2 = 3
Does anyone know how to solve this?
Advertisement
Answer
Ideally you would combine the inserts/updates to both tables in a stored procedure where you would do something like the following:
-- Insert into Table2
insert into dbo.Table2 (TIDI1, oDate, [Status])
select @TIDI1, @oDate, @Status;
-- OR
-- Update Table2
update dbo.Table2 set
TID1 = @TIDI1
, oDate = @oDate
, [Status] = @Status
where TID2 = @TID2;
-- Then update table1 if the date we just added is the latest or more recent
update dbo.Table1 set
LastStatus = @Status
where TID1 = @TIDI1
and @oDate >= (select max(oDate) from dbo.Table2 T2 where T2.TID1 = @TID1);
if @@rowcount = 0 print 'Do nothing';