用 Insert 备份不同数据源中的表,这个 SQL 句子如何写?

oldercat 2002-02-01 04:11:43
例如:

有数据源 Source1,Source2. 其中: Source1 中有 table1,Source2 中有 table2.

table1, table2结构相同.

要用一条 Insert 语句将 table2 中的数据插入到 table 1中,如何写?
...全文
175 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyx326 2002-02-02
  • 打赏
  • 举报
回复
学习,我也很想知道。
「已注销」 2002-02-02
  • 打赏
  • 举报
回复
要么用游标

要么用数据窗口

要么用数据管道

直接写俺以前折腾过 没折腾成功

@_@
zhanwei 2002-02-02
  • 打赏
  • 举报
回复
llitcwl(中国龙)的方法还可以改进:
如果数据量过大,如超过10万行,直接dw_2.update()恐怕用户会受不了。
不妨这样:

用PB还有一个最简单的办法:
1、两个TRANSOBJECTS LTS_SOURCE1,LTS_SOURCE2分别连接数据库source1,source2
2、做两个DW控件,DW_1使用table1作数据原,DW_2使用table2作数据原
dw_1.settransobject(lts_source1)
dw_1.retrieve()
dw_2.settransobject(lts_source2)

3、将DW_1的数据拷贝到DW_2中,先判断数据量的大小,然后分块拷贝,并保存:
long ll_dw1rowcount,ll_dw2rowcount,ll_pos,ll_i
ll_dw1rowcount = dw_1.rowcount()
ll_pos = 0
do while ll_dw1rowcount > ll_pos + 3000
dw_2.copydata(dw_1,Primary!,ll_pos + 1,3000 )
//此处语法可能有问题,我记不准了
ll_pos = ll_pos + 3000
for li_i=1 to dw_2.rowcount()
dw_2.SetItemStatus(li_i, 0, Primary!, newModified!)
next
if dw_2.update() = 1 then
commit using lts_source2
else
messagebox()
rollback using lts_source2
exit
end if
dw_2.reset()
loop
//下面代码处理剩下的部分
if ll_dw1rowcount > ll_pos then
dw_2.copydata(dw_1,Primary!,ll_pos + 1,ll_dw1rowcount - ll_pos )
//此处语法可能有问题,我记不准了
for li_i=1 to dw_2.rowcount()
dw_2.SetItemStatus(li_i, 0, Primary!, newModified!)
next
if dw_2.update() = 1 then
commit using lts_source2
else
messagebox()
rollback using lts_source2
end if
end if

4:搞定,效率能好一些。

zhanwei 2002-02-02
  • 打赏
  • 举报
回复
楼上的方法很好,
tiantianpb(甜甜),你那么做真行么???
alinew 2002-02-02
  • 打赏
  • 举报
回复
实在不行写个游标,分别把transaction带上
llitcwl 2002-02-02
  • 打赏
  • 举报
回复
用PB还有一个最简单的办法:
1:做两个DW控件,DW_1连源,DW_2连目的(setstransobject(另外一个))
2:将DW_1的数据拷贝到DW_2中,用
dw_2.object.data.primary=dw_1.object.data.primary或
dw_1.getfullstate(lb_1);dw_2.setfullstate(lb_1)都行。
3:改变dw_2的状态为插入状态,再提交
for li_i=1 to dw_2.rowcount()
dw_2.SetItemStatus(li_i, 0,
Primary!, newModified!)
next
dw_2.update()
4:搞定,最多用6行代码就可以了。
oldercat 2002-02-01
  • 打赏
  • 举报
回复
另外,如果用数据管道, 数据源是变化的, 怎样在代码中动态建立数据管道?
oldercat 2002-02-01
  • 打赏
  • 举报
回复
如果 source1, source2 是数据库名的话, tiantian 的方法可以,但是此处他们是数据源的名字, 如何写?
tiantianpb 2002-02-01
  • 打赏
  • 举报
回复
是两个不同的数据库的,你们问题又不看看清楚,就去教训人呀!
killerdanny 2002-02-01
  • 打赏
  • 举报
回复
INSERT
select
这个最基本了,应该会呀!好好看看SQL吧!
fzymr 2002-02-01
  • 打赏
  • 举报
回复
insert into table1
select * from table2 //oracle
tiantianpb 2002-02-01
  • 打赏
  • 举报
回复
insert into source2..table2 select source1..table1//ms sql server中
myhaihong 2002-02-01
  • 打赏
  • 举报
回复
如果用数据管道可以实现,SQL我不会写:(

401

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧