首页 新闻 搜索 专区 学院

[MSSQL 2005] insert into select 语法错误。“违反了UNIQUE KEY 约束'***',不能在对象'dbo.T1'中插入重复

0
[已解决问题] 解决于 2014-10-24 14:28

需求:插入表数据。该表的数据,来源于另外两个表,且另外两个表没有相互关系

表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但是接着也是面临一样的问题

问题补充:

smallbird2012的主页 smallbird2012 | 初学一级 | 园豆:120
提问于:2013-12-19 18:03
< >
分享
最佳答案
1

看看你的T1表的结构,没有主键应该也没设置唯一性的约束吧!错误的提示还是非常清楚的指出了错误的原因的,看看你的表结构,或者先用写死的数据(完全一样的)先插入几条试试,如果可以,再进一步找是不是你那个插入语句有问题!

奖励园豆:5
godtrue | 菜鸟二级 |园豆:242 | 2013-12-19 18:16
其他回答(1)
0

楼上正解

jerry-Tom | 园豆:4077 (老鸟四级) | 2013-12-20 10:40

有出现了这个问题,把答案写一下吧

在创建外键关系时,把“强制外键约束”设置为否。就OK了

唯一的确定可能会导致数据的不一致。

支持(0) 反对(0) smallbird2012 | 园豆:120 (初学一级) | 2014-10-25 14:29

有出现了这个问题,把答案写一下吧

在创建外键关系时,把“强制外键约束”设置为否。就OK了

唯一的确定可能会导致数据的不一致。

支持(0) 反对(0) smallbird2012 | 园豆:120 (初学一级) | 2014-10-25 14:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册