如何实现两个结构相同数据库SQl server 的合并 急,解决就给分!!!!!

lulei2050 2005-08-27 05:34:14
我现在有多个Sqlserver 的服务器,想实现不同数据库之间的数据的合并。合并的要求如下:
1、不通过网络,通过数据备份成文件,然后传输文件到合并机,通过程序实现把文件中的数据合并到合并机的数据库中。
2、通过程序来实现,不使用sqlserver 提供的企业管理器
3、不同服务器上的数据结构完全相同
...全文
1098 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
weill 2005-08-30
  • 打赏
  • 举报
回复
当然了,你也许还要问我用完后怎么分离你的数据库。呵呵。
本来,这些你都可以在CSDN的SQL专区找到相关资料的,这儿就顺便给你写一下吧。

简单的SQL分离语句:
EXEC sp_detach_db 'NewDB', 'true'

分离后你就可以直接把附加入的数据库文件给删了。

提示的一点是,如果这个要分离的数据库当前正有人使用和联接,你就分离不了它,呵呵。怎么办?
那就麻烦大了些,一般得写存储过程先停止所有联接进程。在这儿就不多说了,你自个去找找资料吧。

至于两个数据库之间的数据怎么导入,也应该你自个去想了。不难的。如果是要一条一条进行查对,判断,在同机上,可以用BCB的ADO去控制,保险一些,当然,写存储过程也是可以考虑的,特别是SQL服务器在网络上。
weill 2005-08-30
  • 打赏
  • 举报
回复
如果是按我的方法,那么,传过来的数据库文件的文件名可以不作任何更改,但必需同时附加入你的本地SQL数据库,当然是附加为另一个不同名称的数据。然后的操作,就是两个数据库之类数据的对传了。

数据库附加操作的基本SQL命令:

EXEC sp_attach_db @dbname = N'NewDB',
@filename1 = N'D:\Microsoft SQL Server\MSSQL\Data\NewDBFile.mdf',
@filename2 = N'D:\Microsoft SQL Server\MSSQL\Data\NewDBFile_log.ldf'

上面的语句中,第一行决定新附加入的数据库的库名为"NewDB"
第二行是说,数据库文件为"D:\Microsoft SQL Server\MSSQL\Data\NewDBFile.mdf"
第三行是说,数据库的log文件为"D:\Microsoft SQL Server\MSSQL\Data\NewDBFile_log.ldf"

这是附加的SQL语句基本操作。
如果要运用到BCB编程中,那么,你先要使用程序合成你想要发送的字串(主要是数据库名和文件名),然后使用ADO直接向SQL服务器发送就可以了。

示例如下:
//SQL语句合成部分,请据你实际情况改动。
String SQLStrLS,SQLStrLS1,SQLStrLS2,SQLStrLS3;
SQLStrLS1 = "EXEC sp_attach_db @dbname = N'NewDB',";
SQLStrLS2 = "@filename1 = N'D:\Microsoft SQL Server\MSSQL\Data\NewDBFile.mdf',";
SQLStrLS3 = "@filename2 = N'D:\Microsoft SQL Server\MSSQL\Data\NewDBFile_log.ldf';
SQLStrLS = SQLStrLS1+SQLStrLS2+SQLStrLS3;

//ADO动态生成,为发送SQL语句做准备
TADOConnection* ADOCnTmp=new TADOConnection(Application);
TADOQuery* ADOQryTmp=new TADOQuery(Application);
//向主机联接的字串,请据实际情况修改下一行。
ADOCnTmp->ConnectionString = "Provider=SQLOLEDB.1;Password=youPass;Persist Security Info=True;User ID=youID;Initial Catalog=master;Data Source=127.0.0.1";
ADOCnTmp->LoginPrompt =false;
ADOQryTmp->Connection =ADOCnTmp;
ADOQryTmp->SQL->Add(SQLStrLS);

ADOQryTmp->ExecSQL();//发送SQL语句。

//以下清理生成的ADO,以回收内存资源。
ADOQryTmp->Active =false;
ADOCnTmp->Connected =false;
delete ADOQryTmp;
delete ADOCnTmp;


zjcxc 2005-08-30
  • 打赏
  • 举报
回复
用bcp行吗?

1. bcp源库的所有表到指定目录,并且根据表名生成不同的文本文件名
2. 压缩生成的所有文件为一个压缩包
3. 传递到目标服务器
4. 解压缩到指定目录
5. 使用bcp根据目标数据库的表从对应目录提取相应的文件导入数据实现合并.
sczyq 2005-08-29
  • 打赏
  • 举报
回复
同意,无法完全使用备份文件来操作。

weill 2005-08-29
  • 打赏
  • 举报
回复
1、如果说,在合并时完全脱离SQL服务器来做,我想,不是一般的人能做到的。
不过,为什么硬要给自个找麻烦呢?为什么不能在合并的机器上安装一个SQL服务器呢?

2、如果合并的机器上有SQL服务器,那就好办了,对于熟练使用SQL企业管理器的人来说,都不要进行什么编程,附加入两个不同的数据库文件(当然了,每个数据库二个文件一共是四个文件)。然后对相应的表进行导入操作就完事。

3、当然了,也许操作的人是菜鸟,那就没办法了,只能你给他写好程序啦。那么,写就写吧,SQL上手动操作能办到的事,用BCB向其发命令,也不是什么难事,容易得很啊。实在不行,在合并的机器上写好存储过程,然后用BCB写的程序触发一下,也是非常容易的。

写了这么多,你应该能完成你的任务了吧,呵呵。
我不懂电脑 2005-08-29
  • 打赏
  • 举报
回复
通过程序来实现
可以用BCB调用Sql Server的DTS来进行。如何在c++builder中使用dts?请看
http://community.csdn.net/Expert/topic/3443/3443157.xml?temp=.6285364
lulei2050 2005-08-29
  • 打赏
  • 举报
回复
你好,非常感谢大家给我的建议,特别是weill提供的方法,现在我有点问题想想请教 weill
1、现在我们的合并机子上面有sql,并且已经运行了这个同名的数据库
2、现在有以下两点,我也是新手,特请教
a/如何通过程序来附加数据库
b]现在传过来的文件名(数据库名)和我的和并机中的数据库名完全相同,是不是要更改,要不如何附加呢
3、请各位高手说得明白以一点,最好附一部分代码,
4、如果解决了,重谢
lulei2050 2005-08-28
  • 打赏
  • 举报
回复
你好,谢谢你给我的回复,现在我对你的恢复不大明白,你能不能说得更详细一点:
现在我的问题是:
1、两个数据库的结构完全一致,只是纪录的不同。
2、至于一个数据库中的表的关系,我没有建立关系
3、现在我想实现的通过命令的方式在一台数据库上把数据备成为一个文件,
4、该文件通过网络e_mail的方式或者u盘的方式传到合并数据库所在的计算机
5、通过命令的方式来实现数据的合并,当然对于重复的纪录,我们要进行别处理
6、现在是两台数据库之间不能进行直接的网络通讯
7、我想通过各位高人,实现我这一问题,谢谢


sczyq 2005-08-28
  • 打赏
  • 举报
回复
如果知道表关系,那么就很简单了,按表的主次关系,一个一个完成,如果表的主次关系不是很明确,则需要先进行分析,SQL Server 应当能够分析出来。

其次,对每个表的数据合并,只要检查唯一性即可(如编码表,有主鍵,若存在,就不要再复制了)
lulei2050 2005-08-28
  • 打赏
  • 举报
回复
各位高人,怎么不回复一下,我急需解决问题,在线等。。。。。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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