【问题标题】:Insert Data else Update FROM a CSV file?插入数据或者从 CSV 文件更新?
【发布时间】:2014-02-22 04:07:26
【问题描述】:

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

【问题讨论】:

  • 你检查过Merge指令吗?
  • 我使用的是 SQL Server 2008。是的,我尝试了合并命令,但出现错误。
  • 你能发布到目前为止你尝试过的东西吗?
  • 我已经编辑了我的帖子。谢谢。

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


【解决方案1】:

我认为下面的链接会对你有所帮助

http://technet.microsoft.com/en-us/library/bb522522%28v=sql.105%29.aspx

【讨论】:

  • 如果该链接失效,此答案将变得毫无用处。
猜你喜欢
  • 2014-01-03
  • 2021-04-21
  • 2019-02-06
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多