この気の利いた小さな機能について知りました。いくつか質問があります。以下のステートメントを検討してください。
これは、それがどのように機能するかを解釈する方法です。USING ステートメントは、正しい一致があるかどうかを確認するために比較されるものですか? 今のまま使いたいのですが、MATCH部分でソーステーブルから他に2列使いたいです。私はそれをすることはできません。それで、2つの列(decesed(綴りが間違っていることはわかっています:))とhicno_enc)を使用できる方法はありますか?
私がやりたいことはもう1つありますが、可能かどうかはわかりませんが、行がターゲットに存在するがソースに存在しない場合は、非アクティブとしてマークします。
SELECT FIRST_NAME, LAST_NAME, SEX1, BIRTH_DATE
FROM
aco.tmpimport i
INNER JOIN aco.patients p
ON p.hicnoenc = i.hicno_enc
MERGE aco.patients AS target
USING (
SELECT FIRST_NAME, LAST_NAME, SEX1, BIRTH_DATE
FROM aco.tmpimport
) AS source
ON target.hicnoenc = source.hicno_enc
WHEN MATCHED AND target.isdeceased <> CONVERT(BIT,source.decesed) THEN
UPDATE
SET
target.isdeceased = source.decesed,
updatedat = getdate(),
updatedby = 0
WHEN NOT MATCHED THEN
INSERT (firstname, lastname, gender, dob, isdeceased, hicnoenc)
VALUES (source.FIRST_NAME,
source.LAST_NAME,
source.sex1,
source.BIRTH_DATE,
source.decesed,
source.hicno_enc);