日期:2014-05-18  浏览次数:20770 次

insert into 表1 select * from 表2的问题
表t1,t2结构相同,其中第一个字段为id字段是标记字段,自动增加。
用insert   into   t2   select   *   from   t1   从t1插入记录到t2会提示错误
“仅当使用了列的列表,并且   IDENTITY_INSERT   为   ON   时,才能在表   't2 '   中为标识列指定显式值。”
但是把语句改成 "   insert   into   t2   select   除id字段外的各字段列表   from   t1   "就可以执行但是这样的话就很不方便,我的t2表有上百个字段,那不能用*号的话岂不是要把这一百来个字段一个个写出来....
有没有解决办法呢?

------解决方案--------------------
set IDENTITY_INSERT t2 ON
insert into t2 select * from t1
set IDENTITY_INSERT t2 OFF

------解决方案--------------------
你的id字段是主关键字字段,系统要求主关键字不能有重复的,如果你用*的话当然就行不通了。你可以不把id字段定义为标识字段,这样就没有问题了。
------解决方案--------------------
SET QUOTED_IDENTIFIER ON
GO
--
insert into t2 select * from t1
SET QUOTED_IDENTIFIER OFF
GO
------解决方案--------------------
insert into t2 select * from t1
中有自动增长列~~~~在select * from t1 中把自动增长列提出(指定非自动增长列)就可以了!
------解决方案--------------------
如果你的ID字段为主键的话那样插入肯定是不可以的,你可以这样试试
insert into t1 (字段1,字段2.....安段N)
select XXXXX from t2
注:(字段1,字段2.....安段N)中不包括ID安段,XXXXX为前面括号中内容一样的字段.