T1 中有 UNIQUE KEY 约束,你插入的数据中有重复的。所以会报错

解决方案 »

  1.   

    1、你上面的语句:
    insert into T1 ( ID,DESC)select T2.t2_id,T3.t3_codefrom table2 T2 ,table3 T3where T2.desc='desc2',T3.desc='desc3';红色的好像有问题,改成这样才对:
    第一个SQL语句:insert into T1 ( ID,DESC)select T2.t2_id,T3.t3_code
    from table2 T2 ,table3 T3
    where T2.desc='desc2' and T3.desc='desc3';
    2、之所以会报 “违反了UNIQUE KEY 约束'***',不能在对象'dbo.T1'中插入重复键,语句已终止。” 这个错,应该是由于你的T1 表中id字段有一个 unique约束,导致了插入重复数据报错
      

  2.   

    从你的图上看,这个表建了1个,唯一索引,UQ_CI_CiSoftware__46B27FE2,所以才导致了,插入重复数据,报错的:
      

  3.   

    楼上各位都提到了 插入重复数据出报错。但是这个在前台界面增加的时候,怎么可以增加而不报错呢?我说一下前台界面操作:下拉框选择数据,然后选中其中一个数据,确定。List of Value的形式。
    有没有办法,来达到后台添加数据目的??
      

  4.   


    你能看到那个lisview操作后,设计到的代码里是如何拼接的语句不,如果看不了,那就只能用sql profiler来抓取语句了
      

  5.   

    前端插入和创建表也不可能违反约束的,Profiler抓一下其实现方式才是根本。
      

  6.   

    谢谢各位,之前没有接触过sql profiler,周五下午找资料设置,抓取了一下SQL。总共有5个语句,前三个是SELECT 语句,后面两个是insert 语句。第一个insert语句,是插入日志表中。"INSERT INTO UserOptLog(...) VALUES (...) SELECT SCOPE_IDENTITY() AS ID",第二个就是跟我上面语句相关的"INSERT INTO CI_Cisoftware (1,2) values (1,2)".唯一,不同的是SELECT SCOPE_IDENTITY() AS ID ,有什么具体作用?? 
      

  7.   


    哦,SELECT SCOPE_IDENTITY() AS ID的意思就是,当你的表UserOptLog 中有自增列的时候,你想取到刚插入表中的这个自增列的值,那么就可以用这个函数来取:SCOPE_IDENTITY()
      

  8.   

    获取事务范围内的自增id,如果使用@@Identity获取,可能在并发情况下获取不准确的数据
      

  9.   

    详细例子可以看我的文章http://blog.csdn.net/dba_huangzj/article/details/7685162
      

  10.   

    结贴!谢谢各位,学习到很多。问题总结,
    1.是我自己的数据错误。
    2.sql profiler去抓取SQL语句是根本。
    3.顺便发了一个sql profiler的扫盲贴。
      

  11.   

    insert  是插入   你要你更新  用update   才能 select