繁体   English   中英

如何根据特定条件在SQL中更新两个表

[英]How to update two tables in SQL based on certain condition

我有两个表Table1Table2

  • Table1包含ID (UniqueIdentifier) PK, IsActive (bit), ExpiryDate (DateTime), LastUpdateDT (Datetime)

  • Table2包含ID (uniqueIdentifier) PK, Table1ID (FK to Table1), IsActive (bit), LastUpdateDt (datetime)

Table1 Table2有多个行指向Table1相同PK。

现在,我声明了一个变量@Now = Getdate() 我想从Table1中找到IsActive = 1ExpiryDate < @Now所有ID。 使用这些ID,我想将两个表中的IsActive标志以及LastUpdateDt分别LastUpdateDt为0和@Now

如何在SQL中实现此逻辑?

一次,Table1中可以有多行满足此条件。

DECLARE @Now DATETIME
SET @Now = GETDATE()

首先更新Table2

Update Table2
Set IsActive=0,
LastUpdateDT=@Now
WHERE Table1ID in (SELECT ID FROM Table1 WHERE IsActive = 1 AND ExpiryDate < @Now)

立即更新Table1

Update Table1
Set IsActive=0,
LastUpdateDT=@Now
WHERE IsActive = 1 AND ExpiryDate < @Now
CREATE TABLE #temp(ID UniqueIdentifier);

DECLARE @Now DATETIME = Getdate();

UPDATE Table1
 SET IsActive = 0,
     LastUpdateDt = @Now
OUTPUT inserted.ID INTO #temp(ID)    
WHERE IsActive = 1 and ExpiryDate < @Now

UPDATE Table2
 SET IsActive = 0,
     LastUpdateDt = @Now   
WHERE IsActive = 1 and ExpiryDate < @Now
AND Table1ID IN (SELECT ID
                 FROM #temp)

DROP TABLE #temp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM