亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網(wǎng)絡(luò),我們將竭誠為您提供優(yōu)質(zhì)的服務(wù)! 誠征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯(lián)系我們 [ 會(huì)員登錄/注冊 ]
促銷推廣
客服中心
業(yè)務(wù)咨詢
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352289
點(diǎn)擊這里給我發(fā)消息  81721488
有事點(diǎn)擊這里…  376585780
有事點(diǎn)擊這里…  872642803
有事點(diǎn)擊這里…  459248018
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  380791050
技術(shù)支持
有事點(diǎn)擊這里…  714236853
有事點(diǎn)擊這里…  719304487
有事點(diǎn)擊這里…  1208894568
有事點(diǎn)擊這里…  61352289
在線客服
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  983054746
有事點(diǎn)擊這里…  893984210
當(dāng)前位置:首頁 >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

從Oracle數(shù)據(jù)庫到SQL Server數(shù)據(jù)庫主鍵的遷移

添加時(shí)間:2014-10-23 2:02:13  添加: 思海網(wǎng)絡(luò) 
由于項(xiàng)目需要要將以前Oracle的數(shù)據(jù)庫轉(zhuǎn)化為SQL Server,今天利用SQL Server的DTD進(jìn)行數(shù)據(jù)庫的遷移,但導(dǎo)入以后發(fā)現(xiàn)只導(dǎo)入了表結(jié)構(gòu)和數(shù)據(jù),而表的一些主鍵約束都沒導(dǎo)過來,感覺很郁悶,而手頭又沒有好的遷移工具,如Erwin,所以動(dòng)手寫了個(gè)小工具,基本實(shí)現(xiàn)了主鍵的轉(zhuǎn)移,主要代碼如下:

主要控件:

    ADOConnOrcale: TADOConnection;  //連接Oracle
    ADOConnSQLServer: TADOConnection; //連接SQL Server
    
    O1: TADOQuery;  //連接Oracle
    S1: TADOQuery; //連接SQL Server
    S2: TADOQuery; //連接SQL Server

    ProgressBar1: TProgressBar;  //進(jìn)度條
    Memo1: TMemo;  //顯示出錯(cuò)信息
    EdtServer: TEdit;  //服務(wù)器
    EdtDataBase: TEdit; //數(shù)據(jù)庫名稱
    EdtUser: TEdit;  //用戶名
    EdtPass: TEdit;  //口令

    Button1: TButton;  //執(zhí)行按鈕

//常量
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';

在執(zhí)行前先進(jìn)行Oracle和SQL Server數(shù)據(jù)庫的連接。

連接Oracle:

  ADOConnOrcale.ConnectionString :=Format(ORAConnStr,[trim(EdtDataBase.Text),
         trim(EdtUser.Text),trim(EdtPass.Text)]);
  try
    ADOConnOrcale.Open;
    MsgBox('Oracle數(shù)據(jù)庫連接成功!');
  Except
    MsgBox('Oracle數(shù)據(jù)庫連接失敗!');
  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數(shù)據(jù)庫連接成功!')
  except
    MsgBox('SQL Server數(shù)據(jù)庫連接失敗!');
  end;

主要執(zhí)行代碼,比較亂,沒有整理,不過實(shí)現(xiàn)功能就行了。

procedure TForm1.Button1Click(Sender: TObject);
var
  i:Integer;
  FieldN, tableN, fieldM,aa:String;
begin
  if Not ADOConnOrcale.Connected then
  begin
    MsgBox('請先連接Oracle數(shù)據(jù)庫!');
    exit;
  end;
  if not ADOConnSQLServer.Connected then
  begin
    MsgBox('請先連接SQL Server數(shù)據(jù)庫!');
    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表是否存在當(dāng)前的字段信息
      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;
     //是當(dāng)前表,循環(huán)讀取主鍵信息
     if (tableN='') or (tableN= O1.fieldbyname('table_name').AsString) then
     begin
       FieldN:=FieldN+'['+O1.fieldbyname('COLUMN_NAME').AsString+'],';//表明相同或初試時(shí)
       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+'  導(dǎo)入出錯(cuò)!';
           exit;
         end;
       end;
     end;
     ProgressBar1.StepIt;
     Application.ProcessMessages;
     O1.Next;
    end;
    MsgBox('導(dǎo)入完成!'); 
  finally
    Screen.Cursor :=crDefault;
    ProgressBar1.Visible :=False;
  end;
end;

關(guān)鍵字:Oracle、數(shù)據(jù)庫、SQL Server

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話:(0757)22630313、22633833
中華人民共和國增值電信業(yè)務(wù)經(jīng)營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網(wǎng)站公安備案編號:44060602000007 交互式欄目專項(xiàng)備案編號:200303DD003  
察察 工商 網(wǎng)安 舉報(bào)有獎(jiǎng)  警警  手機(jī)打開網(wǎng)站