標籤:
2015-01-26
軟體開發中,經常涉及到不同資料庫(包括不同產品的不同版本)之間的資料結構與資料的匯入匯出。處理過程中會遇到很多問題,尤為突出重要的一個問題就是主從表之間,從表有外檢約束,從而導致部分資料無法匯入。
情景一、同一資料庫產品,相同版本
此種情況下來源資料庫與目標資料庫的資料結構與資料的匯入匯出非常簡單。
方法1:備份來源資料庫,恢複到目標資料庫即完成。
方法2:使用SQL Sever資料庫內建的【複製資料庫】功能或者【匯入資料】功能按照嚮導操作即可。
情景二、同一資料庫產品,不同版本
情景1、來源資料庫版本低,目標資料庫版本高
此種情況處理方式同情景一。
情景2、來源資料庫版本高,目標資料庫版本低
由於目標資料庫版本低於來源資料庫,來源資料庫中產生的指令碼架構無法相容低版本,所以不能通過直接備份還原的方式來操作。
本文以SQL Server2008R2資料庫為資料來源、SQL2008 Express為目標資料庫為例主要解決主從表之間,從表有外檢約束時,資料匯入失敗的問題。操作過程分為以下幾個步驟:
| 步驟1:從來源資料庫產生資料結構指令碼【不包表含外鍵關係】 |
在資料來源188串連上,右鍵點擊來源資料庫》【任務】》【產生指令碼】
彈出“產生和發布指令碼”
點擊【下一步】按鈕,彈出“簡介”視窗
點擊【下一步】按鈕,彈出“設定指令碼編寫選項”
點擊【進階】按鈕,彈出具體設定視窗【此步驟非常重要】
將“編寫外鍵指令碼”的值設定為false,意思是這一步驟產生的資料結構指令碼中不包含表之間的外鍵關係。其他選項根據實際情況設定。
點擊【確定】按鈕,產生指令碼,入。
將指令碼另存新檔“OriginalDataStructureWithoutFK.sql”。
在目標伺服器上建立目標資料庫,命名同來源資料庫名(其他命名也可以)。
選中建立的資料庫,開啟步驟一中儲存的”OriginalDataStructureWithoutFK.sql“指令檔,運行該檔案,運行成功後,目標資料庫中成功建立了表、視圖、預存程序、自訂函數,如
此步驟中,藉助第三方資料庫外掛程式SqlAssistant,其擁有強大的資料庫擴充功能,本文不做詳細介紹。可以到SqlAssistant官網瞭解更多http://www.softtreetech.com/isql.htm。
選中來源資料庫,點擊右鍵,【Sql Assistant】》【Scripts Data】
彈出”Table Data Export” 匯出Table資料視窗
預設選中來源資料庫與所有的表。點擊【Export】按鈕,產生資料指令碼至【建立查詢時段】中
儲存該資料指令碼為“OriginalData.sql”。
對於表中主鍵或者其他設定為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”。
選中目標資料庫,開啟步驟5中儲存的“OriginalDataStructureOnlyWithFK.sql”指令檔,運行之,運行成功後,查看錶結構
外鍵已經成功建立。
本篇完。
技術研究方向:專註於Web(Mvc)開發架構、WinForm開發架構、項目(代碼)自動化產生器、ORM等技術研究與開發應用 企業階層專案經驗:編務管理系統、印前管理系統、印務管理系統、圖書銷售管理系統、圖書發行管理系統、圖書館管理系統、 資料交換平台、ERP綜合管理平台 歡迎轉載,請註明文章出處與連結資訊。 如果文章對您有協助,請幫忙推薦,謝謝! 撰寫人:張傳寧 http://www.cnblogs.com/SavionZhang 歡迎加入技術交流群: 427789286 |
下篇:待續……
SQL Server資料庫中匯入匯出資料及結構時主外鍵關係的處理