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

insert into select 语法错误。“违反了UNIQUE KEY 约束'***',不能在对象'dbo.T1'中插入重复
需求:插入表数据。该表的数据,来源于另外两个表,且另外两个表没有相互关系

表T1数据可以为(表T1中没有主键,只是为了显示而已):

1  DESC

1  DESC2

2  TEST

2  TEST2

 

第一个SQL语句:

insert into T1 ( ID,DESC)

select T2.t2_id,T3.t3_code

from table2 T2 ,table3 T3

where T2.desc='desc2',T3.desc='desc3';

执行情况说明:

   如果T1中没有任何数据,1  DESC,2 TEST 可以插入进去。接着1 DESC2就报错。

“违反了UNIQUE KEY 约束'***',不能在对象'dbo.T1'中插入重复键,语句已终止。”

 

问题:

1. SQL语句哪里有错误?

2. MSSQL 中insert into select 来源与多表数据如何写?

 

补充:

insert into T1 ( ID,DESC)

select * from (

select T2.t2_id,T3.t3_code

from table2 T2 ,table3 T3

where T2.desc='desc2',T3.desc='desc3') AS tb;

也报错;

想到了先把

select T2.t2_id,T3.t3_code

from table2 T2 ,table3 T3

where T2.desc='desc2',T3.desc='desc3'

放到临时表temp 里,使用:insert into(ID,DESC) select * from temp但是接着也是面临一样的问题


------解决方案--------------------
表结构贴一下
------解决方案--------------------
T1 中有 UNIQUE KEY 约束,你插入的数据中有重复的。所以会报错
------解决方案--------------------
1、你上面的语句:
insert into T1 ( ID,DESC)

select T2.t2_id,T3.t3_code

from table2 T2 ,table3 T3

where 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约束,导致了插入重复数据报错
------解决方案--------------------
1、去重再插吧。
2、把唯一约束删了。