【发布时间】:2014-01-03 14:15:12
【问题描述】:
我有一个包含用户信息的 CSV 文件,比如说
first_name;last_name;user_id;full_name
列分隔符为;,行终止符为\n。
我需要做的是插入或更新到users 表中。唯一键是user_id:如果这个user_id的记录已经存在,我需要更新,如果没有我需要插入。
但是,有一些问题阻止我使用管理工作室数据导入或bulk insert。
首先,users 表中有更多字段(不仅仅是 4 个),csv 文件中的列顺序与表中的列顺序不对应。所以我需要能够指定文件中的哪一列转到表中的哪一列。
其次,需要填写一些额外的字段。例如,users.email = users.user_id。这是另一个障碍 - 尽管对于新插入的行 users.email = users.user_id,users.email 将来可能会发生变化,所以我不能只插入 user_id 然后运行 update [users] set [email] = [user_id]。
【问题讨论】:
-
您是否尝试过使用导入数据向导?听起来你可能需要一个两阶段的过程
-
@Yakyb 在导入数据向导中我无法填写其他字段。或者我可以吗?
-
@huMptyduMpty,我可以在这里使用
#temp表吗?bulk insert从 csv 中写入,然后编写像if exists(... where user_id=...) then (update ...) else (insert ... )这样的脚本,然后编写#drop temp。对吗? -
@xaxa:对不起,我的意思不是
#temp。数据库中用于此导入的临时物理表。之后可以删除!
标签: sql-server