SQL Server數據庫中導入導出數據及結構時主外鍵關系的處理


2015-01-26

  軟件開發中,經常涉及到不同數據庫(包括不同產品的不同版本)之間的數據結構與數據的導入導出。處理過程中會遇到很多問題,尤為突出重要的一個問題就是主從表之間,從表有外檢約束,從而導致部分數據無法導入。

 

  情景一、同一數據庫產品,相同版本

  此種情況下源數據庫與目標數據庫的數據結構與數據的導入導出非常簡單。

方法1:備份源數據庫,恢復到目標數據庫即完成。

方法2:使用SQL Sever數據庫自帶的【復制數據庫】功能或者【導入數據】功能按照向導操作即可。

 

  情景二、同一數據庫產品,不同版本

          情景1、源數據庫版本低,目標數據庫版本高

        此種情況處理方式同情景一。

          情景2、源數據庫版本高,目標數據庫版本低

        由於目標數據庫版本低於源數據庫,源數據庫中產生的腳本架構無法兼容低版本,所以不能通過直接備份還原的方式來操作。

 

  本文以SQL Server2008R2數據庫為數據源、SQL2008 Express為目標數據庫為例主要解決主從表之間,從表有外檢約束時,數據導入失敗的問題。操作過程分為以下幾個步驟:

  步驟1:從源數據庫生成數據結構腳本【不包表含外鍵關系

 

 

  在數據源188連接上,右鍵點擊源數據庫》【任務】》【生成腳本】

彈出“生成和發布腳本”

點擊【下一步】按鈕,彈出“簡介”窗口

點擊【下一步】按鈕,彈出“設置腳本編寫選項”

點擊【高級】按鈕,彈出具體設置窗口【此步驟非常重要

將“編寫外鍵腳本”的值設置為false,意思是這一步驟生成的數據結構腳本中不包含表之間的外鍵關系。其他選項根據實際情況設置。

點擊【確定】按鈕,生成腳本,入下圖。

 將腳本另存為“OriginalDataStructureWithoutFK.sql”。

 

  步驟2:導入數據結構腳本至目標數據庫

 

 

  在目標服務器上新建目標數據庫,命名同源數據庫名(其他命名也可以)。

選中新建的數據庫,打開步驟一中保存的”OriginalDataStructureWithoutFK.sql“腳本文件,運行該文件,運行成功后,目標數據庫中成功創建了表、視圖、存儲過程、自定義函數,如下圖

 

 

  步驟3:從源數據庫創建數據腳本

 

 

  此步驟中,借助第三方數據庫插件SqlAssistant,其擁有強大的數據庫擴展功能,本文不做詳細介紹。可以到SqlAssistant官網了解更多http://www.softtreetech.com/isql.htm

選中源數據庫,點擊右鍵,【Sql Assistant】》【Scripts Data】

 

彈出”Table Data Export” 導出Table數據窗口

默認選中源數據庫與所有的表。點擊【Export】按鈕,生成數據腳本至【新建查詢窗口】中

保存該數據腳本為“OriginalData.sql”。

  步驟4:導入數據腳本至目標數據庫

 

 

對於表中主鍵或者其他設置為int類型,且設置自增長類型的列,需要做以下處理:

SET IDENTITY_INSERT dbo.T_ACL_User ON ;

一般字段如果是identity的,比如定義的時候nameid identity(1,1)就是說從1開始增長,每次加1,那么插入一條記錄nameid字段是不需要手動賦值(一般也不允許)。那么有時候需要插入自定義值的時候,就設置set identity_insert on;就可以手動插入了。操作完數據插入后,再將其關閉。

 

選中目標數據庫,並打開步驟3中保存的“OriginalData.sql”數據腳本,運行之,成功后,查看數據表

查詢結果可以看出已經成功導入數據。

設置 SET IDENTITY_INSERT dbo.T_ACL_User Off ;

 

  步驟5:從源數據庫生成僅包含表外鍵關系的數據結構腳本

 

 

  步驟與步驟1大致相同,最后一步設置相反

紅色框內,將“編寫外鍵腳本”設置為True,其他選項與步驟1中設置相反。點擊"確定"按鈕,生成腳本,另存為“OriginalDataStructureOnlyWithFK.sql”。

  步驟6:導入外鍵結構關系腳本至目標數據庫

 

 

  選中目標數據庫,打開步驟5中保存的“OriginalDataStructureOnlyWithFK.sql”腳本文件,運行之,運行成功后,查看表結構

外鍵已經成功創建。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM