これがまったく可能かどうか疑問に思っています。条件が真の場合、列xを更新します。そうでない場合、列yが更新されます。
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
私はあちこち検索して、いくつかのことを試しましたが、解決策を見つけることができません。それは不可能だと思いますが、私はここで尋ねて、誰かが以前にそれをやったことがあるかどうかを見ると思いました。前もって感謝します。
条件を使用してクエリの構造を変更することはできません。関連するデータだけを変更してください。これを行うことができます:
update table set
columnx = (case when condition then 25 else columnx end),
columny = (case when condition then columny else 25 end)
これは意味的には同じですが、両方の列が常に更新されるであることに留意してください。これおそらくは問題を引き起こしませんが、トランザクション量が多い場合、同時実行の問題が発生する可能性があります。
具体的にを行う唯一の方法は、動的SQLを使用することです。ただし、これは避けることをお勧めします。上記のソリューションは、ほぼ確実にあなたが求めているものに十分です。
UPDATE table
SET columnx = CASE WHEN condition THEN 25 ELSE columnx END,
columny = CASE WHEN condition THEN columny ELSE 25 END
これは非常に古い質問であり、問題は修正済みとしてマークされています。ただし、テーブルに更新イベントのデータロギングのトリガーがある私のようなケースがある場合、これは問題を引き起こします。両方の列が更新を取得し、ログが無駄なエントリを作成します。私がした方法
IF (CONDITION) IS TRUE
BEGIN
UPDATE table SET columnx = 25
END
ELSE
BEGIN
UPDATE table SET columny = 25
END
これには、上記のソリューションのように、テーブルに不必要な書き込みがないという別の利点があります。
これは非常に古い質問ですが、これは私にとってはうまくいきました:
UPDATE TABLE SET FIELD1 =
CASE
WHEN FIELD1 = Condition1 THEN 'Result1'
WHEN FIELD1 = Condition2 THEN 'Result2'
WHEN FIELD1 = Condition3 THEN 'Result3'
END;
よろしく