現在、SQL ジョブを使用して CSV ファイルの内容をインポートしています (BULK INSERT)。LEFT JOIN ステートメントを使用して、重複があるかどうかを確認し、見つかった場合は挿入しないようにします。ただし、列が重複している場合は、代わりに列を更新したいと思います。
私のCSVファイルのファイルは次のとおりです。
|UserType|Lname|Fname|Mname|ContactNo|Email|Password|Balance|Status
これが私のLEFT JOINステートメントです。
INSERT INTO tblAccount
SELECT CSVTable.AccountID,
CSVTable.UserType,
CSVTable.Lname,
CSVTable.Fname,
CSVTable.Mname,
CSVTable.ContactNo,
CSVTable.Email,
CSVTable.Password,
CSVTable.EPurseBalance,
CSVTable.AccountStatus
FROM CSVTable
LEFT JOIN tblAccount
ON CSVTable.AccountID = tblAccount.AccountID
WHERE tblAccount.AccountID IS NULL
UPDATE
重複が見つかった場合は、既存のレコードを希望します。ユーザーのAccountStatus
. ユーザーが既に Accounts テーブルにいるが、アカウントが非アクティブ化されている場合、行全体ではなく列のみを更新したいと思いAccountStatus
ます。
私の現在のステートメントは、一部の列が異なるかどうかに関係なく、重複するエントリを破棄します。データが存在しない場合は挿入できますが、既に存在する場合は列を更新できますか?
私の質問に答える努力は大歓迎です!
編集
MERGE コマンドを試しました。これが私の声明です:
MERGE
tblAccount AS target
USING
CSVTable AS source
ON
target.AccountID = source.AccountID
WHEN MATCHED THEN
INSERT INTO tblAccount
SELECT CSVTable.AccountID,
CSVTable.UserType,
CSVTable.Lname,
CSVTable.Fname,
CSVTable.Mname,
CSVTable.Address,
CSVTable.Gender,
CSVTable.Birthdate,
CSVTable.ContactNo,
CSVTable.Email,
CSVTable.Password,
CSVTable.EPurseBalance,
CSVTable.AccountStatus
FROM CSVTable
LEFT JOIN tblAccount
ON CSVTable.AccountID = tblAccount.AccountID
WHERE tblAccount.AccountID IS NULL
WHEN NOT MATCHED THEN
UPDATE SET tblAccount.AccountStatus = CSVTable.AccountStatus
;
これは機能せず、SQL サーバーからエラーがスローされます。
Msg 156, Level 15, State 1, Line 8
Incorrect syntax near the keyword 'INTO'.
Msg 156, Level 15, State 1, Line 29
Incorrect syntax near the keyword 'WHEN'.
LEFT JOIN ステートメントを MERGE に挿入しようとしましたが、役に立ちませんでした。何か案は?ありがとう!