首页 > 解决方案 > 仅当达到 Max Date 时才更新 SQL

问题描述

我有两张桌子,例如:

表格1

-----------------------------------------
TID1     Name      Status        LastStatus         
-----------------------------------------
1        A         1             3

表2

-----------------------------------------
TID2     TID1     oDate          Status
-----------------------------------------
1        1        2020-04-01     1
2        1        2020-04-03     2
3        1        2020-04-05     3

场景是:如果我更新Table2on TID2 = 2LastStatusonTable1不应该更新,因为 MAX Date on Table2with TID1=1。所以只有LastStatus在MAX DateTable1有更新时才会更新。Table2

目前,我只在Table2. 对 没有影响Table1。以下是我的代码:

-- 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

有谁知道如何解决这个问题?

标签: sqlsql-serversql-server-2012

解决方案


理想情况下,您将在存储过程中将两个表的插入/更新结合起来,您可以在其中执行以下操作:

-- 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';

推荐阅读