需求:插入表数据。该表的数据,来源于另外两个表,且另外两个表没有相互关系
表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表的结构,没有主键应该也没设置唯一性的约束吧!错误的提示还是非常清楚的指出了错误的原因的,看看你的表结构,或者先用写死的数据(完全一样的)先插入几条试试,如果可以,再进一步找是不是你那个插入语句有问题!
楼上正解
有出现了这个问题,把答案写一下吧
在创建外键关系时,把“强制外键约束”设置为否。就OK了
唯一的确定可能会导致数据的不一致。
有出现了这个问题,把答案写一下吧
在创建外键关系时,把“强制外键约束”设置为否。就OK了
唯一的确定可能会导致数据的不一致。