SQL 中有两个表:表1、表2,结构一样,但都含有自增列(identity),请问这两个表之间数据如何复制?
我用如下SQL制数据时,INSERT INTO 表1 SELECT * FROM 表2
出现了错误,错误如下:
消息 8101,级别 16,状态 1,第 1 行
仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'CustomFormColumnRule'中的标识列指定显式值。
没办法,我只能将两个表的自增列改为:不自增,才能这样实现数据复制。复制完后再改为自增列。
请问各位朋友,有没有更好的方法?

解决方案 »

  1.   

    单向复制  table1 -> table2  table2可以取消自增属性
    双向复制  lz也需要取消自增,因为二者会有重复的ID综上,需要取消其中一个的ID自增属性。
      

  2.   

    INSERT INTO 表2 SELECT a,b,c FROM 表1 --select 表1中不要包含自增列。
      

  3.   

    用 SET IDENTITY_INSERT 表名 ON
    就可以插入identity类型的值了,但是不要让这个id 重复了,因为如果一个id设置成identity类型的话,它就是这个表的主键,希望下面的例子对你有帮助
    IF OBJECT_ID('tb1') IS NOT NULL
    DROP TABLE tb1
    GOCREATE  TABLE tb1 (
    id INT IDENTITY(1,1),
    col VARCHAR(max)
    )INSERT INTO tb1
    SELECT 'a' UNION ALL
    SELECT 'a' UNION ALL
    SELECT 'a' UNION ALL
    SELECT 'a' UNION ALL
    SELECT 'a' UNION ALL
    SELECT 'a' UNION ALL
    SELECT 'a' UNION ALL
    SELECT 'a' UNION ALL
    SELECT 'a' UNION ALL
    SELECT 'a' UNION ALL
    SELECT 'a' UNION ALL
    SELECT 'a'GOIF OBJECT_ID('tb2') IS NOT NULL
    DROP TABLE tb2
    GOCREATE TABLE tb2 (
    id INT IDENTITY(1,1),
    col VARCHAR(max)
    )INSERT INTO tb2 
    SELECT 'b' UNION ALL 
    SELECT 'b' UNION ALL 
    SELECT 'b' UNION ALL 
    SELECT 'b' UNION ALL 
    SELECT 'b' UNION ALL 
    SELECT 'b' UNION ALL 
    SELECT 'b' UNION ALL 
    SELECT 'b' UNION ALL 
    SELECT 'b' UNION ALL 
    SELECT 'b' UNION ALL 
    SELECT 'b' UNION ALL 
    SELECT 'b' GOSET IDENTITY_INSERT tb1 ON
    GOINSERT INTO tb1(id,col)
    SELECT id+30,col FROM tb2
    GOSET IDENTITY_INSERT tb1 OFF
    GOSELECT * FROM tb1GOIF OBJECT_ID('tb1') IS NOT NULL
    DROP TABLE tb1
    GOIF OBJECT_ID('tb2') IS NOT NULL
    DROP TABLE tb2
    GO
      

  4.   

    insert into 表2 select * from 表1
      

  5.   

    什么意思?insert into table1 
    select * from table2这样写就要求表table1中的列数和table2表中的列数一样。应该不会是写成了 
    insert into table1(*)...
    这样的形式吧?
      

  6.   


    列数当然是一样啊,写的也是
    insert into table1 
    select * from table2
    但如果table2有自增列的话,就复制不进去啊
      

  7.   


    原因是你的IDTIFITY 是自增,每个表中如果有自增的话是有计数的,如果导入的表中也有自增他也有自己的计数,举个例子表1 id 到了50 表2 ID到了 90 如果你把表1 插入到表2 表2应该下个ID 是91 但你插入的却是 51所以报错