首先,AAA(ii,nn)表是有关系图的,ii与其他表有关联,且为主键,自增长字段。
例如:AAA含有数据
1 北京
2 上海
5 南京现在有一个BBB(ii,nn)表,没有任何关联,主键。含有数据为
3 天津
4 重庆如果用手工操作导入,那么轻松实现,BBB-->AAA,且AAA结果为
1 北京
2 上海
3 天津
4 重庆
5 南京如果用SQL语句,如何处理
试过的方法有
1、“SET IDENTITY_INSERT AAA ON”这样导入还是提示“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时”的话
2、如果用先建新字段,然后更新新字段让其=ii,然后删除ii字段,最后修改新字段为ii的方法就会造成AAA关联的数据全部清除
例如:AAA含有数据
1 北京
2 上海
5 南京现在有一个BBB(ii,nn)表,没有任何关联,主键。含有数据为
3 天津
4 重庆如果用手工操作导入,那么轻松实现,BBB-->AAA,且AAA结果为
1 北京
2 上海
3 天津
4 重庆
5 南京如果用SQL语句,如何处理
试过的方法有
1、“SET IDENTITY_INSERT AAA ON”这样导入还是提示“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时”的话
2、如果用先建新字段,然后更新新字段让其=ii,然后删除ii字段,最后修改新字段为ii的方法就会造成AAA关联的数据全部清除
insert into tb(列名都写上就ok了) select ....
这样一定不行,因为ii是自增长字段
CREATE TABLE t1(ID int IDENTITY,A int)
GO
--插入记录
INSERT t1 VALUES(1)
GO--1. 将IDENTITY(标识)列变为普通列
ALTER TABLE t1 ADD ID_temp int
GOUPDATE t1 SET ID_temp=ID
ALTER TABLE t1 DROP COLUMN ID
EXEC sp_rename N't1.ID_temp',N'ID',N'COLUMN'
INSERT t1 VALUES(100,9)
GO--2. 将普通列变为标识列
CREATE TABLE t1_temp(ID int,A int IDENTITY)
SET IDENTITY_INSERT t1_temp ON
INSERT t1_temp(ID,A) SELECT * FROM t1
SET IDENTITY_INSERT t1_temp OFF
DROP TABLE T1
GOEXEC sp_rename N't1_temp',N't1'
INSERT t1 VALUES(109999)
GO--显示处理结果
SELECT * FROM t1
/*--结果:
ID A
----------------- -----------
1 1
100 9
109999 10
--*/
SET IDENTITY_INSERT AAA ON
go insert into aaa(ii,nn) select ii,nn from bbb
goSET IDENTITY_INSERT AAA OFF
go
1、“SET IDENTITY_INSERT AAA ON”这样导入还是提示“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时”的话 或许因为他有关联和关系图的原因
2、如果用先建新字段,然后更新新字段让其=ii,然后删除ii字段,最后修改新字段为ii的方法就会造成AAA关联的数据全部清除
比如:bbb表里有记录 2 上海
insert aaa(ii,nn)
select ii,nn from bbb
set identity_insert aaa off
go -----一个ii只对应一个nn的情况,并且这个字段上没有外键,如果有外键,参照外键的说明,现在其他表中加入相应数据insert into aaa(ii,nn) select ii,nn from bbb where not exists (select 1 from aaa where aaa.id=bbb.id)
go SET IDENTITY_INSERT AAA OFF
go
可是 这样导入还是提示“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时”的话
或许因为他有关联和关系图的原因
没想到insert into aaa select * from bbb 这样是不行的
insert into aaa(ii,nn) select ii,nn from bbb 这样就可以了。
还以为IDENTITY_INSERT 不管用或者因为他有关联和关系图的原因呢。
谢谢!