我有(简化了这个例子)带有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