我目前正在使用 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'.
我尝试在我的 MERGE 中插入我的 LEFT JOIN 语句,但无济于事。有任何想法吗?谢谢!