sql server 如何解决excel导入数据库时主键冲突的问题,sql命令怎么写

sql1 = string.Format("insert into bbb(ProductName,ProductRegCode,ProductNo) values('{0}','{1}','{2}')",ProductName, ProductRegCode, ProductNo);

其中ProductNo是主键,

5个回答

加个保护试试,
if not exists(select 1 from bbb where ProductNo = '{2}') insert into bbb(ProductName,ProductRegCode,ProductNo) values('{0}','{1}','{2}')

weixin_39616603
William-Love-Wheel 感谢感谢,最简单优雅的方法!
大约 2 年之前 回复

完全可以把冲突的记录找出来,踢掉!!

weixin_39616603
William-Love-Wheel excel文件会更新的,然后再导入,所以每次都会有主键冲突的问题,难道你每次都要手动删除几千条的记录?你这回答太没诚意了。
大约 2 年之前 回复

方案1:

ALTER TABLE bbb DROP CONSTRAINT pk_name CASCADE;
/*Todo: 1.执行你的导入操作 2.处理掉冲突的的值*/
ALTER TABLE bbb ADD CONSTRAINT pk _name PRIMARY KEY(ProductNo); 

方案2:
创建临时表,不对这个字段检索,导入后处理冲突后再合并

weixin_39616603
William-Love-Wheel 数据库已经设置ProductNo为主键了,bbb有若干条记录,然后这些记录会和即将导入的excel中的记录有重复,即 主键冲突,那请问怎么导入excel里面的记录。
大约 2 年之前 回复
weixin_42695878
weixin_42695878 答案是否合意,想下载个东西,急需你宝贵的C币
大约 2 年之前 回复
weixin_42695878
weixin_42695878 回复weixin_42695878: 可能需要给账号先赋予一下权限
大约 2 年之前 回复
weixin_42695878
weixin_42695878 回复weixin_39616603: 要注意的是你api登录账号是否有调用这个命令的权限
大约 2 年之前 回复
weixin_42695878
weixin_42695878 回复weixin_39616603: 你是通过函数调用的sql语句吧,一般api 都可以调用sql语句,你直接通过api调用就可以了
大约 2 年之前 回复
weixin_39616603
William-Love-Wheel 请问怎么把它和我的sql语句合并?
大约 2 年之前 回复

建立临时表#temp1 插入之,然后如果是完全一样的distinct就可以过滤掉啦。然后如果主键重复其他字段不重复的话,那就可能需要自己甄别。具体方法为

 select count(ProductName),ProductNo from #temp1 group by  ProductNo having count(ProductNo)>1

然后简单粗暴地删除临时表的相同数据可以参考这里:

 declare @max integer,@id integer 
declare cur_rows cursor local for  select count(ProductName) from #temp1 group by  ProductNo having count(ProductNo)>1
open cur_rows 
fetch cur_rows into @id,@max 
while @@fetch_status=0 
begin 
select @max = @max -1 
set rowcount @max 
delete from #temp1 where ProductNo = @id 
fetch cur_rows into @id,@max 
end 
close cur_rows 
set rowcount 0 
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问