Id、Speed、およびDescriptionフィールドを持つTableA(この例では簡略化)です。 TableBにはTableAの変更が含まれています。表Bは、Id(FKは表AのIdと一致する)、ModifiedSpeedおよびOriginalSpeedフィールドを含む。変数テーブルの更新ケース
基本的には、TableBにTableAに関するレコードがあるかどうかに基づいて、1つのステートメント内で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
@Barry:私は更新のためにストアドプロシージャを使用しています。はい、私はSqlにはあまりよくありませんが、制限や最善の方法を試しています。 TableAは道路リンクですが、プロジェクトの要件はエンドユーザーが速度を変更でき、変更された場合、エクスポートストアドプロシージャが実行されたときにTableA値は更新されませんが、速度変更テーブル(TableB )が修正されていない場合は、TableAの速度値は – Manatherin