2014-01-11 5 views
1

У меня есть две таблицы Table1 и Table2.Как обновить две таблицы в SQL на основе определенных условий

  • Table1 содержит ID (UniqueIdentifier) PK, IsActive (bit), ExpiryDate (DateTime), LastUpdateDT (Datetime)

  • Table2 содержит ID (uniqueIdentifier) PK, Table1ID (FK to Table1), IsActive (bit), LastUpdateDt (datetime)

Есть несколько строк в Table2 указывающие на то же PK из Table1.

Теперь я объявил переменную @Now = Getdate(). Я хочу найти все ID из Таблицы 1, для которых IsActive = 1 и ExpiryDate < @Now. Используя эти идентификаторы, я хочу обновить флаг IsActive, а также LastUpdateDt в обеих таблицах до 0 и @Now соответственно.

Как я могу реализовать эту логику в SQL?

В то же время может быть несколько строк из таблицы 1, удовлетворяющих этому условию.

ответ

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

Спасибо за быстрый ответ .... и извините за поздний ответ .... –

+0

Без проблем рад, что это помогло :) –

+0

быстрый вопрос Если я хочу добавить несколько столбцов в таблицу temp из таблицы 1 и использовать их в разделе Where для таблицы2 , Как мне это сделать? –

0
DECLARE @Now DATETIME 
SET @Now = GETDATE() 

Update Table2 первый

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

Update Table1 Теперь

Update Table1 
Set IsActive=0, 
[email protected] 
WHERE IsActive = 1 AND ExpiryDate < @Now 
+0

Спасибо за быстрый ответ .... и извините за поздний ответ .... Но я хотел обновление, как сотни строк, и я искал более надежный способ. Тем не менее, ваше - хорошее и простое решение. –

Смежные вопросы