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、把唯一约束删了。