私は数時間動的結合を研究していて、これを理解するのに問題があります。XMLフィードデータを一時SQLテーブルに一括読み込みしてから、一時テーブルから本番テーブルを追加/更新しています。ただし、必要に応じてデータを保持するために、条件付きロジックを使用することも試みています。以下のコードは基本的に、SQL Server 2008以降でのみ使用可能なMerge()メソッドの複製です(実稼働サーバーは2005です)。特に、このクエリで実装する必要がある条件付きロジックは、一時テーブルの[eMail]フィールドが空白でない場合、本番テーブルのそのフィールドを更新することです。それ以外の場合は、(データを保持するために)運用サーバーの[eMail]フィールドを更新しないでください。これが私が試したものですが、構文が正しくないために機能しません。
UPDATE rt
SET rt.[AccountID] = tmp.[AccountID],
rt.[CustNbr] = tmp.[CustNbr],
rt.[ClientID] = tmp.[ClientID],
rt.[ClientX] = tmp.[ClientX],
rt.[CorpID] = tmp.[CorpID],
rt.[fName] = tmp.[fName],
rt.[lName] = tmp.[lName],
rt.[Position] = tmp.[Position],
rt.[eMail] = tmp.[eMail],
rt.[ClientNotes] = tmp.[ClientNotes],
rt.[DeptID] = tmp.[DeptID]
FROM AccountClient rt
IF(SELECT eMail FROM AccountClientTemp) <> ''
INNER JOIN AccountClientTemp tmp
ON tmp.[fName] = rt.[fName]
and tmp.[lName] = rt.[lName]
--and tmp.[eMail] = rt.[eMail]
and tmp.[Position] = rt.[Position]
and tmp.[DeptID] = rt.[DeptID]
ELSE
INNER JOIN AccountClientTemp tmp
ON tmp.[fName] = rt.[fName]
and tmp.[lName] = rt.[lName]
and tmp.[eMail] = rt.[eMail]
and tmp.[Position] = rt.[Position]
and tmp.[DeptID] = rt.[DeptID]
INSERT INTO AccountClient
([AccountID], [CustNbr], [ClientID], [CorpID], [fName], [lName], [Position],
[eMail], [ClientNotes], [DeptID])
SELECT tmp.[AccountID], tmp.[CustNbr], tmp.[ClientID], tmp.[CorpID], tmp.[fName], tmp.[lName],
tmp.[Position], tmp.[eMail], tmp.[ClientNotes], tmp.[DeptID]
FROM AccountClientTemp tmp
LEFT JOIN AccountClient rt
ON tmp.[fName] = rt.[fName]
and tmp.[lName] = rt.[lName]
and tmp.[eMail] = rt.[eMail]
and tmp.[Position] = rt.[Position]
WHERE rt.[fName] IS NULL
and rt.[lName] IS NULL
and rt.[eMail] IS NULL
and rt.[Position] IS NULL