SQL Server資料庫中導入導出數據及結構時主外鍵關係的處理
- 2019 年 10 月 4 日
- 筆記
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」腳本文件,運行之,運行成功後,查看錶結構

外鍵已經成功創建。