首先,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关联的数据全部清除

解决方案 »

  1.   

    1、“SET  IDENTITY_INSERT AAA ON”这样导入还是提示“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时”的话 insert into tb(列名都写上就ok了) select ....
      

  2.   

    wzy_love_sly:
    insert into tb(列名都写上就ok了) select ....
    这样一定不行,因为ii是自增长字段
      

  3.   

    TABLE那里设置成不自动增长, 然后再插入不就可以了??
      

  4.   

    icelovey,对。但是用语句如何更改?而且处理还要修改回去。谢谢
      

  5.   

    这个恰好前几天整过,“SET  IDENTITY_INSERT AAA ON”后,insert into 中要指明字段名称.
      

  6.   

    --创建测试表
    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
    --*/
      

  7.   

    试一下:
    SET  IDENTITY_INSERT AAA ON
    go insert into aaa(ii,nn) select ii,nn from bbb
    goSET  IDENTITY_INSERT AAA OFF
    go 
      

  8.   

    wag_enu 你的方法测试了,不行。试过的方法有 
    1、“SET  IDENTITY_INSERT AAA ON”这样导入还是提示“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时”的话 或许因为他有关联和关系图的原因
      

  9.   

    fredrickhu,你说的方法我提了
    2、如果用先建新字段,然后更新新字段让其=ii,然后删除ii字段,最后修改新字段为ii的方法就会造成AAA关联的数据全部清除
      

  10.   

    按9楼的导入,问题是如果bbb里和aaa里有重复的数据,就乱了
    比如:bbb表里有记录 2 上海 
      

  11.   

    set identity_insert aaa on
    insert aaa(ii,nn)
    select ii,nn from bbb
    set identity_insert aaa off
      

  12.   

    SET  IDENTITY_INSERT AAA ON 
    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 
      

  13.   

    colacat911,这里倒是没有重复。
    可是 这样导入还是提示“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时”的话 
    或许因为他有关联和关系图的原因
      

  14.   

    多谢,多谢
    没想到insert into aaa select * from bbb 这样是不行的
    insert into aaa(ii,nn) select ii,nn from bbb 这样就可以了。
    还以为IDENTITY_INSERT 不管用或者因为他有关联和关系图的原因呢。
    谢谢!