William-Love-Wheel
2018-07-19 03:07
采纳率: 66.7%
浏览 1.6k

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

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

其中ProductNo是主键,

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • sunsloth 2018-07-19 06:29
    已采纳

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

    点赞 评论
  • 雲鬆 2018-07-19 03:13

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

    点赞 评论
  • weixin_42695878 2018-07-19 03:25

    方案1:

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

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

    点赞 评论
  • nonefire 2018-07-19 06:12

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

     select count(ProductName),ProductNo from #temp1 group by  ProductNo having count(ProductNo)>1
    
    点赞 评论
  • nonefire 2018-07-19 06:37

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

     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 
    
    点赞 评论

相关推荐 更多相似问题