动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息



本月文章推荐
.数据库手册:Oracle维护常用SQL语.
.调用linux日期函数,实现每天自动.
.如何使用iso文件?.
.Oracle & Linux--完美的组合.
.Oracle10g废弃log_archive_start.
.针对Oracle数据库及其应用程序的.
.Oracle 学习过程中的笔记以及几个.
.Oracle10g 自动工作负载信息库.
.Oracle 数据库 10g 标准版 1 数据.
.redhat 8.0下的vsftp的配置.
.一个可以在Oracle发信的Procedur.
.Useful SQL reference 一些有用的.
.在Oracle中实现搜索分页查询.
.NULL 使用详解.
.如何在Linux下的安装Oracle.
.Oracle数据库 FAQs and Tips.
.如何应对ORACLE面试中的问题技术.
.哈希分区表使用时注意事项.
.Linux 指令大全(2).
.更改Oracle数据库表的表空间.

实例讲解Oracle到SQL Server主键的迁移

发表日期:2008-5-14 |


这篇论坛文章(赛迪网技术社区)主要介绍了Oracle数据库到SQL Server数据库主键的迁移过程,具体内容请参考下文。

由于项目需要要将以前Oracle的数据库转化为SQL Server,今天利用SQL Server的DTD进行数据库的迁移,但导入以后发现只导入了表结构和数据,而表的一些主键约束都没导过来,感觉很郁闷,而手头又没有好的迁移工具,如Erwin,所以动手写了个小工具,基本实现了主键的转移,主要代码如下:

主要控件:

ADOConnOrcale: TADOConnection; //连接Oracle

ADOConnSQLServer: TADOConnection; //连接SQL Server

O1: TADOQuery; //连接Oracle

S1: TADOQuery; //连接SQL Server

S2: TADOQuery; //连接SQL Server

ProgressBar1: TProgressBar; //进度条

Memo1: TMemo; //显示出错信息

EdtServer: TEdit; //服务器

EdtDataBase: TEdit; //数据库名称

EdtUser: TEdit; //用户名

EdtPass: TEdit; //口令

Button1: TButton; //执行按钮

//常量

const

ORAConnStr='Provider=MSDAORA.1;Data Source=%S;User ID=%S;Password=%S;Persist Security Info=True';

SQLConnStr='Provider=SQLOLEDB.1;Data Source=%S;Initial Catalog=%S;User ID=%S;Password=%S;Persist Security Info=False';

在执行前先进行Oracle和SQL Server数据库的连接。

连接Oracle:

ADOConnOrcale.ConnectionString :=Format(ORAConnStr,[trim(EdtDataBase.Text),

trim(EdtUser.Text),trim(EdtPass.Text)]);

try

ADOConnOrcale.Open;

MsgBox('Oracle数据库连接成功!');

Except

MsgBox('Oracle数据库连接失败!');

end;

连接SQL Server:

ADOConnSQLServer.ConnectionString :=Format(SQLConnStr,[trim(EdtServer.Text),

trim(EdtDataBase.Text),trim(EdtUser.Text),trim(EdtPass.Text)]);

try

ADOConnSQLServer.Open;

MsgBox('SQL Server数据库连接成功!')

except

MsgBox('SQL Server数据库连接失败!');

end;

主要执行代码,比较乱,没有整理,不过实现功能就行了。

procedure TForm1.Button1Click(Sender: TObject);

var

i:Integer;

FieldN, tableN, fieldM,aa:String;

begin

if Not ADOConnOrcale.Connected then

begin

MsgBox('请先连接Oracle数据库!');

exit;

end;

if not ADOConnSQLServer.Connected then

begin

MsgBox('请先连接SQL Server数据库!');

exit;

end;

Screen.Cursor :=crHourGlass;

try

o1.Close;

O1.SQL.Clear;

//取oracle表用户budget的所有主键约束信息

o1.SQL.Text :=' select a.CONSTRAINT_NAME,a.CONSTRAINT_TYPE,a.TABLE_NAME, b.COLUMN_NAME,b.position '+

' from USER_CONSTRAINTS a,USER_CONS_COLUMNS b where a.CONSTRAINT_NAME=b.CONSTRAINT_NAME '+

' and a.table_name=b.table_name and constraint_type=''P'' and a.owner=b.owner '+

' and lower(a.owner)=''budget'' order by a.table_name,b.position ';

O1.open;

tableN:='';

O1.First;

ProgressBar1.Max:=O1.RecordCount;

ProgressBar1.Min:=0;

ProgressBar1.Step:=1;

ProgressBar1.Visible :=true;

for i:=0 to O1.RecordCount -1 do

begin

s2.Close;

S2.SQL.Clear;

//判断SQL Server表是否存在当前的字段信息

S2.SQL.Text:='SELECT a.name AS tanme, b.* FROM sysobjects a INNER JOIN '+

' syscolumns b ON a.id = b.id '+

' WHERE (a.xtype = ''U'') AND (a.name = '''+O1.fieldbyname('table_name').AsString+''''+

') and b.name= '''+O1.fieldbyname('COLUMN_NAME').AsString+''''+

' ORDER BY b.id';

S2.Open;

//不存在,输出表明和字段名

if s2.RecordCount<=0 then

begin

Memo1.Text:=Memo1.Text+#13+'表:'''+O1.fieldbyname('table_name').AsString+''''+

' 字段:'''+O1.fieldbyname('COLUMN_NAME').AsString+''' 不存在!';

O1.Next;

tableN:='';

FieldN:='';

Continue;

end;

//是当前表,循环读取主键信息

if (tableN='') or (tableN= O1.fieldbyname('table_name').AsString) then

begin

FieldN:=FieldN+'['+O1.fieldbyname('COLUMN_NAME').AsString+'],';//表明相同或初试时

tableN:= O1.fieldbyname('table_name').AsString;

end

else

begin

with S1 do

begin

try

//取SQL Server表的主键信息

Close;

sql.Clear;

sql.Text:='SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='''+tableN+'''';

Open;

first;

aa:=fieldbyname('constraint_name').AsString;

//如果该主键在SQL表中已存在,删除该主键信息,重建该表主键

if recordcount>0 then

begin

sql.Clear;

SQL.Text:='ALTER TABLE '+tableN+' DROP CONSTRAINT '+aa; //删除主键

ExecSQL;

end;

SQL.Clear; //COLUMN_NAME

SQL.Text:='ALTER TABLE '+tableN+' WITH NOCHECK ADD '+

' CONSTRAINT [PK_'+tableN+'] PRIMARY KEY NONCLUSTERED '+

' ( '+ copy(FieldN,1,length(FieldN)-1)+

' )';

ExecSQL;

FieldN:='['+O1.fieldbyname('COLUMN_NAME').AsString+'],';

tableN:= O1.fieldbyname('table_name').AsString;

Except

Memo1.Text :=Memo1.Text+'表: '+tableN+' 字段: '+FieldN+' 导入出错!';

exit;

end;

end;

end;

ProgressBar1.StepIt;

Application.ProcessMessages;

O1.Next;

end;

MsgBox('导入完成!');

finally

Screen.Cursor :=crDefault;

ProgressBar1.Visible :=False;

end;

end;

上一篇:相同软件环境下Oracle9i数据库迁移方法 人气:527
下一篇:Oracle数据库中使用rman建立data guard 人气:556
浏览全部Oracle的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-19 Roclog v3.1.4 SP1
2008-7-19 马克斯CMS(Maxcms) v1.1 Build 0
2008-7-19 乐学LBBS无限级目录图片直读系统
2008-7-19 PHP在线考试系统PPExam v1.2.5
2008-7-19 APJE私服发布系统 v2.0
2008-7-19 寻觅图书管理系统 v1.12
2008-7-19 寻觅学校管理系统
2008-7-19 义乌网站目录baidu新闻订阅 v1.0
2008-7-19 牛仔IIS日志蜘蛛爬行记录分析器
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵