sql - 仅当达到 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
场景是:如果我更新Table2
on TID2 = 2
,LastStatus
onTable1
不应该更新,因为 MAX Date on Table2
with 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
有谁知道如何解决这个问题?
解决方案
理想情况下,您将在存储过程中将两个表的插入/更新结合起来,您可以在其中执行以下操作:
-- 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';
推荐阅读
- bash - 如何在 Linux 上实时查看文件内容?
- python - 如何在 Twisted Web 服务器中定义具有多个段的路径
- docker - 无法使用 http://localhost:8080/getAll 访问我在容器中运行的应用程序
- jquery - 如何结合var?+ 示例脚本
- javascript - 从后端动态接收未知文件类型的图像
- python - python 逆科拉兹猜想
- powershell - 如何通过powershell以同样的方式获取所有Azure服务的key
- testrail - 在测试铁路中面临 409 问题
- node.js - 带有 URL 参数的请求
- biztalk - BizTalk Server 2016 可以检索终止的消息吗?