您当前位置:优侠库 > 资讯攻略 >
来源:未知
2019-06-12 09:46:48 浏览: 分类:资讯攻略

SQL Server 2008中的新日期数据类型

本文主要介绍从oracle数据库到sql server数据库主键的迁移过程。详情请参考以下内容。

因为项目需要把以前的Oracle数据库改造成SQL Server,所以今天用SQL Server的DTD来迁移数据库。但是导入后发现只导入了表结构和数据,表的一些主键约束没有导入。感觉很郁闷,手头也没有好的迁移工具,比如Erwin,就写了一个小工具,基本实现了主键转移。主要代码如下:

主要控制:

以下是引用的内容:

ADOConnOrcale:tado connection;//连接Oracle
adoconn SQL server:tado connection;//连接到SQL Server
O1:tado query;//连接Oracle
S1:tado query;//连接SQL Server
S2:tado query;//连接到SQL Server
progress bar 1:tpprogress bar;//进度条
memo 1:t memo;//显示错误消息
EDT server:TEdit;//server
EDT database:TEdit;//数据库名称
EDT user:TEdit;//username
ed tpass:TEdit;//密码
button 1:TButton;//执行按钮
//常量
const
oraconnstr = ' provider = msdaora . 1;数据源= % S;用户ID = % S;密码= % S;持续安全性

info = True ';
SQLConnStr = ' Provider = SQL oledb . 1;数据源= % S;初始目录= % S;用户ID = % S;密码= % S;

持久安全信息= False ';
在执行前连接Oracle和SQL Server数据库。

连接到Oracle:

以下是引用的内容:

ADOConnOrcale。ConnectionString:= Format(ORAConnStr,[trim(EdtDataBase。Text),
trim(EdtUser。Text)、trim(ed pass。正文)]);
尝试
ADOConnOrcale。开放;
MsgBox('Oracle数据库连接成功!');
except
msgbox(' Oracle数据库连接失败!');
end;

连接到SQL Server:

以下是引用的内容:

ADOConnSQLServer。ConnectionString:= Format(SQLConnStr,[trim(EdtServer。Text),
trim(EdtDataBase。Text)、trim(EdtUser。Text)、trim(ed pass。正文)]);
请尝试
ADOConnSQLServer。开放;
MsgBox('SQL Server数据库连接成功!')
except
msgbox(' SQL server数据库连接失败!');
end;

主要的执行代码,比较乱,还没有整理出来,但是实现功能就够了。

以下是引用的内容:

程序TForm1。Button1Click(发件人:to object);
var
i:整数;
FieldN,tableN,fieldM,aa:String;
如果不是adoconn或cale,则开始
。connected then
begin
msgbox('请先连接到Oracle数据库!');
退出;
end;
如果不是adoconn SQL Server.connected,则
begin
msgbox('请先连接到SQL Server数据库!');
退出;
end;
屏幕。cursor:= Cr hourglass;
试试
o1。关闭;
O1。SQL . Clear
//获取oracle表用户预算的所有主键约束信息
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其中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。第一;
ProgressBar1。Max:=O1。记录计数;
ProgressBar1。min:= 0;
ProgressBar1。步长:= 1;
ProgressBar1。可见:=真;
for i:=0到O1。record count-1 do
begin
S2。关闭;S2。SQL . Clear
//确定SQL Server表中是否存在当前字段信息
S2 . SQL . text:= ' select a . name as time,b . * FROM sys objects a INNER JOIN '+
' sys columns b ON a . id = b . id '+
' WHERE(a . xtype = ' ' ' U ' ')AND(a . name = ' '+O1 . field byname(' table _ name ')

。AsString+''''+
')和b . NAME = ' ' '+O1 . field by NAME(' COLUMN _ NAME ')。as string+' ' ' '+
' ORDER BY b . id ';S2。开放;
//不存在,输出指示和字段名
ifs 2 . record count < = 0 then
begin
memo 1 . text:= memo 1 . text+# 13+' Table:' '+O1 . field by name(' Table _ name ')。as string+“”+
“字段;
O1。接下来;
tableN:= ' ';
field n:= ' ';
继续;
end;
//是当前表,以及主键信息
if (tablen = ' ')或(tablen = O1 . field byname(' table _ name ')。Asstring)然后
begin
field n:= field n+。//表示相同或初始测试
tablen:= O1 . field byname(' table _ name ')。ass string;
end
else
begin
with s1do
begin
try
/get SQL Server表的主键信息
Close;
sql。清晰;
sql。text:= ' SELECT * FROM INFORMATION _ SCHEMA。KEY_COLUMN_USAGE,其中表名=

' '+tableN+' ' ' ';
打开;
第一;
aa:= field by name(' constraint _ name ')。ass string;
//如果SQL表中已经存在主键,则删除主键信息,重建表的主键
If record count >;0,然后
开始
sql。清晰;
SQL。text:= ' ALTER TABLE '+tableN+' DROP CONSTRAINT '+aa;//删除主键
exec SQL;
end;
SQL。清晰;//COLUMN_NAME
SQL。text:= ' ALTER TABLE '+tableN+' WITH NOCHECK ADD '+
' CONSTRAINT[PK _ '+tableN+']PRIMARY KEY非聚集'+
' ( '+ copy(FieldN,1,length(FieldN)-1)+
')';
exec SQL;
field n:= '['+O1 . field by NAME(' COLUMN _ NAME ')。AsString+'],';
tableN:= O1 . field by name(' table _ name ')。ass string;
except
memo 1 . text:= memo 1 . text+'表:'+tableN+'字段:'+FieldN+'导入错误!;
退出;
end;
end;
end;
ProgressBar1。StepIt
应用程序。处理消息;
O1。接下来;
end;
MsgBox('导入完成!');
最后
屏幕。cursor:= Cr default;
ProgressBar1。可见:=假;
end;
end;

关键词:SQL Server

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227177.html

攻略资讯
安卓软件
安卓游戏