从CSV文件插入数据否则更新?

时间:2014-02-22 04:07:27

标签: sql sql-server csv insert-update sql-job

我目前正在使用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语句,但无济于事。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)