日期:2014-05-17  浏览次数:20362 次

导入一个excel到mssql的问题
要导入一个用户表,字段不多,就一个ID和一个Name,
mssql里还有一个Password是密码,密码是MD5加密的,是在导入到过程中通过c#代码转换,默认的密码就是用户id,所以每个不同,不能事先生成好。
要求是如果mssql里已经有这个id的用户了,就不能导了,已防把已经修改过的密码又覆盖了。

应该如何做比较合理?一个个查看是不是已经存在,然后导入似乎效率太低,是先导入临时表,然后再关联,找出原数据库没有的记录,一次性导入吗?大致的代码如何写?谢谢

------解决方案--------------------
可一次性导入,导入前添加一临时字段标记一下导入来源,后期好作处理
出现问题也可快速找出导入的数据并直接删除
------解决方案--------------------
我觉的读到 dataset 再用循环方式写入 比较好,反正你是要进行判断的。

------解决方案--------------------
是先导入临时表,然后再关联
----------------------------
想想你的资源开销 不比你判断一下再写入的少。
------解决方案--------------------
excel导入到临时表 然后再去掉重复的(如果是一条一条的导入那速度肯定就会慢一些)

然后从临时表中判断插入正式表,例如: 
insert tb(tid,name) select distinct * from # temp 
where not exists(select * from tb where tid=temp.tid)

------解决方案--------------------
SQL code

-------------临时接插入耗时测试
declare @i int
set @i=0
--创建临时表
select 0 ID, 'UserName1' UserName  into #TestUser where 1=2
--插入到临时表
while(@i<10000)
begin
    Insert into #TestUser   select @i, 'UserName1' 
    set @i=@i+1
end
--从临时表插入到正式表
insert TestUser(ID,UserName) select * from #TestUser  where not exists(select 1 from TestUser where ID=#TestUser.ID)
drop table #TestUser
--(耗时:14秒)