数据库里两张表:target(id,name,tablename)和source(number,name,sex)。现在想要将表source中的每一条数据的name值插入到比表target中,插入的同时分配id(target表中的最大id加1)和tablename。请问大家如何写这样的sql语句。
   insert into target(id,name,tablename)…………??

解决方案 »

  1.   

     insert into target select ((Select Max(Rownum) From target) + Rownum) as id,name,'' from source
      

  2.   

      insert into target Select ((Select Max(Rownum) From target) + Rownum) As Id, Name, ''From source t
      

  3.   

    谢谢caoleione 。问题是往target里插的id没有实现增长,id是主键。如果source里有多条数据的话,insert into target Select ((Select Max(Rownum) From target) + Rownum) As Id, Name, ''From source t这条语句里的id就一直没变,就会有约束错误。
      

  4.   

    insert 一次 commit;一次就好了
      

  5.   

    不好意思写错了。应该是下面的
    INSERT INTO TARGET SELECT ROWNUM+(SELECT MAX(ID) AS RN FROM TARGET) RN,NAME,'TABLENAME' FROM SOURCE
      

  6.   

    请问dbcxbj,这样如何insert一次commit呢?
     
      

  7.   

      insert into target 
      Select  Max(Rownum)+1   As Id, Name, 'source '
      From source 
      

  8.   

    谢谢,这个还是有问题。
    违反了 PRIMARY KEY 约束 'PK_APP_EVENT'。不能在对象 'APP_EVENT' 中插入重复键。
      

  9.   


    这个要commit吗?一个固定值加一个变化的Rownum为什么要Commit才行?
    我试了一下,不Commit就行啊
    谁说一下
      

  10.   

    Insert into target
    select (rownum + (select count(*) from target)) as id,name,tablename
        from source
      

  11.   

    不好意思,我一直在sqlserver里面试卷的,不行,在oracle里面一试是可以的。不知道在sqlserver里怎么实现
      

  12.   

    sqlserve里没有rownum这样的方法,不知道怎样可实现
      

  13.   

     
      select   IDENTITY(int,   1,1)   as   row_no,*   into   #temp   from   table1   
      select   *   from   #temp    
    只能用临时表来转一下了