如何复制SQL表结构用数据及数据,到另外一个表中?(50分)

  • 主题发起人 主题发起人 芭芭拉
  • 开始时间 开始时间

芭芭拉

Unregistered / Unconfirmed
GUEST, unregistred user!
如何复制SQL表结构用数据及数据,到另外一个表中?
 
有个类似的第三方控件,但我忘了是哪个了。
 
batchmove 组件
 
没明白你的意思:
create table aa as select * from bb你看行么(Oracle)
 
Create table table1 (select * from table2)
 
可能我没说清吧,是这样的,我在SQL数据库中有一个aaa的数据库,里面有几个表。
我要复制aaa数据库中的表,及表内的数据,到bbb数据库中,
(原bbb尚不存在,如何创建?及复制所有aaa的表到bbb上?)
 
使用backup and restore应该可以实现你的要求!
这是SQL DBA最简单的工作。
 
用DTS包,
 
可以手工建成数据库bbb,在导表及表中的数据时可以用BatchMove控件
 
我要在DELPHI 程序中实现这个功能,如何做?
 
你这就是数据备份,没有必要在程序中实现,可以考虑通过存储过程实现。
在DELPHI中调用存储过程。
 
1.先建立bbb数据库
2.用一循环类似下面的语句就可以了
select * into bbb.table1 from aaa.table1
 
用程序做吧~~~~~~~~~

你有没有信箱啊?????
 
select a.产品代码, a.单价
from 单位表 a,
(select 产品代码,max(更新时间) 更新时间 from 单价表 group by 产品代码) b
where a.产品代码=b.产品代码 and a.更新时间=b.更新时间
order by a.产品代码

 
procedure TworkdataintoForm.BitBtn5Click(Sender: TObject);
var tempcursor:Tcursor;
begin
if messagebox(handle,pchar('您真的要把数据转移到备份数据库去吗?请确定'+formatdatetime('yyyy-mm-dd',datetimepicker3.date)+'到'+formatdatetime('yyyy-mm-dd',datetimepicker4.Date)+'这个时间段内的数据暂时不需要用到!'),'提示',mb_iconwarning+4)<>mryes then
exit;
try
tempcursor:=screen.Cursor;
screen.Cursor:=crSqlwait;
begin
with removeQuery do
begin
sql.Clear;
sql.Add('insert into 备份收发表 select * from 收发表');
sql.Add('where (交料日期>=#'+formatdatetime('yyyy-mm-dd',datetimepicker3.Date)+'#)');
sql.Add('and(交料日期<=#'+formatdatetime('yyyy-mm-dd',datetimepicker4.Date)+'#)');
execsql;
//////////////////复制到备份数据库
sql.Clear;
sql.Add('delete * from 收发表');
sql.Add('where (交料日期>=#'+formatdatetime('yyyy-mm-dd',datetimepicker3.Date)+'#)');
sql.Add('and(交料日期<=#'+formatdatetime('yyyy-mm-dd',datetimepicker4.Date)+'#)');
execsql;
end;
end;
with dm1.inandoutSet do
begin
close;
open;
end;
showmessage('数据转移完毕!');
finally
screen.Cursor:=tempcursor;
end;
end;

procedure TworkdataintoForm.BitBtn6Click(Sender: TObject);
var tempcursor:Tcursor;
begin
if messagebox(handle,pchar('您真的从备份数据库中提出'+formatdatetime('yyyy-mm-dd',datetimepicker3.date)+'到'+formatdatetime('yyyy-mm-dd',datetimepicker4.Date)+'这个时间段内的数据吗?'),'提示',mb_iconwarning+4)<>mryes then
exit;
try
tempcursor:=screen.Cursor;
screen.Cursor:=crSqlwait;

begin
with removeQuery do
begin
sql.Clear;
sql.Add('insert into 收发表 select * from 备份收发表');
sql.Add('where (交料日期>=#'+formatdatetime('yyyy-mm-dd',datetimepicker3.Date)+'#)');
sql.Add('and(交料日期<=#'+formatdatetime('yyyy-mm-dd',datetimepicker4.Date)+'#)');
execsql;
//////////////////复制到备份数据库
sql.Clear;
sql.Add('delete * from 备份收发表');
sql.Add('where (交料日期>=#'+formatdatetime('yyyy-mm-dd',datetimepicker3.Date)+'#)');
sql.Add('and(交料日期<=#'+formatdatetime('yyyy-mm-dd',datetimepicker4.Date)+'#)');
execsql;
end;
end;
with dm1.inandoutSet do
begin
close;
open;
end;
showmessage('数据还原完毕!');
finally
screen.Cursor:=tempcursor;
end;
 
我是要备份到另一个数据库,不是数据表啊。
 
在ADOQUERY的SQL中加入
CREATE DATABASE bbb
ON
( NAME = bbb_dat,
FILENAME = 'c:/temp/bbb.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = 'bbb_log',
FILENAME = 'c:/temp/bbblog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )

再执行ADOQUERY.EXECSQL,就生成BBB数据库,具体可以看SQL-SERVER帮助

//复制数据表到bbb数据库
select * into bbb..表1 from aaa..表1

 
QuickSilver, 的答案完全正确,谢谢你!
 
QuickSilver, 你好!
按你的方法都可以创建,但还有一个小问题,不知应如何解决。
我在AAA数据库中有定义数据字段的默认值,可创建到bbb数据库后,数据库没有默认值玿
何让bbb数据库也有默认值?

 
请参考SQL-SERVER的

ALTER TABLE
通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义

可给数据字段设定默认DEFAULT


 
后退
顶部