日期:2014-05-17  浏览次数:20777 次

从表1复制数据到表2


char buf1[256];
char buf2[256];

//打开源数据库
db.open( DBSourcePath );

//打开目标数据库
db2.open( DBTargetPath );


//开始合并
memset( buf1, 0, sizeof( buf1 ) );
memset( buf2, 0, sizeof( buf2 ) );
strcpy( buf1, "select * from Table1 where statue = '2';" );
Query q = db.execQuery( buf1 );
while( !q.eof() )
{
for(int i=0;i<8;i++) //Table1每条记录有8个项
{
Field[i] = q.fieldValue(i); //获取每一项的数据


q.nextRow();
sprintf( buf2, "insert into Table2 values  ('%s','%s','%s','%s','%s','%s','%s', '%s');",Field[0], Field[1], Field[2], Field[3], Field[4], Field[5], Field[6], Field[7] ); //拼装数据
db2.execDML( buf2 ); //插入数据到表2
}    

//合并结束
db.close();
db2.close();



相当于添加表1的数据到表2,除了上面的那种方法外,有没有其它的方法?
能不能不用读出每一条记录的每一项,用拼装的方式插入到另一张表中去?







------解决方案--------------------
如果忽略权限控制,那么可以在目标数据库建立一个指向源数据库的dblink,在应用程序中使用insert into select from的方式。
------解决方案--------------------
直接执行这句就可以了:
insert into Table2(列名1,列名2)select 列名1,列名2 from Table1 where statue = '2'
------解决方案--------------------
引用:
如果忽略权限控制,那么可以在目标数据库建立一个指向源数据库的dblink,在应用程序中使用insert into select from的方式。
 1楼正解,直接用

   insert into table2(...) select ... from table1 where ...

------解决方案--------------------
列一致的话直接
insert into Table2
select * from Table1 where statue = '2'
------解决方案--------------------
引用:
但数据源不一样,Table1 在20130925.db里面,Table2 在20130926.db里面.


在20130925.db下创建一个dblink指向20130926.db
然后在执行
insert into Table2(列名1,列名2)select 列名1,列名2 from Table1@dblink名称 where statue = '2' 
------解决方案--------------------
2个库的数据源一样吗