2013-12-12 28 views
0

我有一個需要更新的表extradata。它需要更新863個不同的帳戶。來自大型選擇查詢的更新表

下面是查詢塊,它返回並將需要更改的帳號放入臨時表中。

是否有一種簡單的方法可以通過此查詢執行批量更新?

declare @tmp table (number int) 

insert into @tmp 
select accountid as number from letterrequest 
where lettercode in ('97001','70003','19998','91009','20000','99100','19997','70002','99099','91008','97002','97210','97231') 
and dateProcessed >= '2013-12-04' 
union all 
select number from gizmo_requests 
where letterCode in (97001,70003,19998,91009,20000,99100,19997,70002,99099,91008,97002,97210,97231) 
and dateProcessed >= '2013-12-04' 
union all 
select number from jm_efiling 
where letter in (97001,70003,19998,91009,20000,99100,19997,70002,99099,91008,97002,97210,97231) 
and datePrinted >= '2013-12-04' 

select distinct * from @tmp 

此查詢返回863行帳戶ID。

update extradata set line4 = 'TEST' 
where extracode = 'L3' 
and number in @tmp 

僅當數字列在上面的臨時表中時。

+0

內連接附加碼來@tmp? –

+0

「easy」是什麼意思?更快或更好的代碼? – Shiva

+0

@shiva簡單易用,從tmp表更新863。我能想到做這件事的唯一方法是設置一個while循環的痛苦。 –

回答

3

嘗試:

update extradata set line4 = 'TEST' 
from extradata inner join @tmp T 
on extradata.number = T.number 
where extracode = 'L3' 

您可以使用連接在更新查詢

+0

任何人都可以從@tmp獲取不同的值?由於某種原因,當我內部連接兩個表時,它返回865個結果。但是當我選擇不同和內部聯接兩個表時它返回863.不知道爲什麼非不同版本返回兩個額外的行。 –

+1

也許你在'extradata'表中有一些具有相同'number'的記錄? –

1

使用in與子查詢中where聲明:

update extradata 
    set line4 = 'TEST' 
    where extracode = 'L3' and 
      number in (select number from @tmp);