我有(簡化了這個例子)帶有Id,Speed和Description字段的TableA。 TableB包含對TableA的修改。表B包含一個Id(FK所以將匹配TableA中的Id),ModifiedSpeed和OriginalSpeed字段。變量表更新情況
基本上我希望能夠做的是根據TableB是否有與TableA相關的記錄更新一個語句內的TableA Speed或TableB OriginalSpeed。
這是我迄今爲止嘗試過,希望這會給我想要的一些想法,我不知道我解釋得很好:
SELECT a.Id, a.Description, a.Speed, CASE
WHEN EXISTS(SELECT b.Id FROM TableB b WHERE b.Id = a.Id) THEN
UPDATE TableB SET OriginalSpeed =
CASE
WHEN (a.Speed is not null) THEN a.Speed
WHEN a.Description = 'Motorway' THEN 70
WHEN a.Description = 'A Road' THEN 60
ELSE 30
END
ELSE
UPDATE TableA SET Speed =
CASE
WHEN (a.Speed is not null) THEN a.Speed
WHEN a.Description = 'Motorway' THEN 70
WHEN a.Description = 'A Road' THEN 60
ELSE 30
END
END
FROM TableA a
任何幫助,將不勝感激。
在select語句的中間不能有更新語句,您可以不使用case語句來切換要更新的表。您是否使用存儲過程來更新數據?你想創建某種審計表嗎? – codingbadger 2011-01-26 13:59:49
@Barry:我正在使用存儲過程進行更新是的,雖然我仍然在努力解決侷限性和最佳做法,但我對Sql並不擅長。 TableA是道路鏈接,但對項目的要求是最終用戶可以修改速度,並且如果修改了速度,則當運行導出存儲過程時不會更新TableA值,但速度修改表中的原始值(TableB )是,如果它沒有被修改,TableA速度值應該更新爲 – Manatherin 2011-01-26 14:06:36