更新している列の重複を禁止する更新SQLクエリを作成する最良の方法を見つけるために、数時間(おそらく必要以上に)試みてきました。
つまり、TableA.ColA の名前が既に 'TEST1' である場合、別のレコードを変更するときに、ColA の値を 'TEST1' にすることはできません。
クエリを選択に分離し、条件付きロジックを許可するサーバー層コードを使用するのは非常に簡単です。
SELECT ID, NAME FROM TABLEA WHERE NAME = 'TEST1'
IF TableA.recordcount > 0 then
UPDATE SET NAME = 'TEST1' WHERE ID = 1234
END IF
しかし、私はこれら 2 つのクエリを 1 つのクエリに結合できるかどうかを知りたいと思っています。
私は Oracle を使用して物事を把握していますが、SQL Server クエリも見たいと思っています。MERGE ステートメントが機能すると考えましたが、明らかな理由により、次の句を使用できません。
..etc.. WHEN NOT MATCHED UPDATE SET ..etc.. WHERE ID = 1234
AND 結合で言及されている場合、列を更新することはできません (Oracle の制限ですが、SQL Server に限定されません)。
また、値の重複を防ぐ列に制約を設定できることは知っていますが、制約を使用せずにこれを実行できるクエリがあるかどうかを確認したいと思います。
これは、私が思いつくことができるものを確認するための、私の側での起動試行の例です (失敗したことについての説明は必要ありません)。
エラー: ORA-01732: このビューではデータ操作操作は無効です
UPDATE (
SELECT d.NAME, ch.NAME FROM (
SELECT 'test1' AS NAME, '2722' AS ID
FROM DUAL
) d
LEFT JOIN TABLEA a
ON UPPER(a.name) = UPPER(d.name)
)
SET a.name = 'test2'
WHERE a.name is null and a.id = d.id
マージを試みましたが、不可能だとあきらめました。私も存在しないと考えました(ただし、基準に一致しない他のすべてのレコードを誤って更新する可能性があるため、注意する必要があります)