SQLServer數據庫的“生成腳本”功能詳解(避免導出來的sql腳本還原的數據庫缺失)


·

 

下方直接用一個例子來引起話題:

SQL Server生成SQL腳本丟失了默認值和外鍵的問題

 SQL Server在生成SQL Scripts(SQL 腳本)的時候,默認是沒有默認值和外鍵等的。

  具體解決的方法如下:

  1、生成SQL腳本的時候在“常規”標簽選擇“全部顯示”,再選上“編寫全部對象腳本”。

  2、在“選項”標簽頁里,選中表腳本選項的所有內容,包括:   
  -編寫索引腳本   
  -編寫全文索引腳本   
  -編寫觸發器腳本   
  -編寫主鍵、外鍵、默認值、和檢查約束腳本

  這樣生成的SQL腳本就包括了主鍵、外鍵、默認值、和檢查約束腳本等了。

 

不知道是受SQLSERVER2000,2005的影響還是,Next的慣性思維,在使用數據庫“生成腳本”的時候基本上不會太多關注里面的配置選項,但其實從SQLSERVER2008開始,微軟在生成腳本這方面做了很大的改進,讓用戶自己選擇配置的東西更多了。

例如經常用到的一個是:從一個數據庫將數據導入另一個庫,或者向下兼容還原,以前操作很麻煩的,導入導出,鏈接等等。我自己是經常用第三方軟件生成Insert 的SQL,然后到目的數據庫執行,當然數據不是太多的情況,這是種比較快速的方法。

剛好最近在做數據庫遷移時,用到了“生成數據腳本”這個功能,目的就是實現生成Insert SQL的方式還原數據庫。

 

那我們來看下SQLSERVER2008的“生成腳本”功能,不知道大家有沒有詳細看看里面的配置,沒有的話剛好一起看下:

 

導出的sql語句:

上圖用紅框標記的是比較常用的功能,你是否有注意到呢?

通過這些配置,基本上可以復制一個數據庫的所有SQL,輕松實現數據庫不同版本雙向復制。

這個問題幫我一個大忙呀,不然又要徒勞的寫一個重復的功能到Sqlserver上,看來以后配置的地方還是要多留意下的。

 

分析說明

這個功能從sqlserver2000就有,獨立出來是在sqlserver2005
但是很直接的用經驗告訴你,如果想生成帶數據的腳本,比如說sqlserver2008生成sqlserver2000的腳本,或者sqlserver2005的腳本,這個工具生成的代碼比較機械化,很多內容其實前后沖突,比如說建立外鍵關系,而且生成低版本的腳本,甚至有錯誤。 導致數據庫還原失敗甚至是缺漏還原,根本無法正常使用。
 
 
解決方法:主外鍵關系,在導出腳本的時候注意一下先后順序就可以了。(但是,如果導出的文件有幾個G以上內,根本就無法打開編輯;這時應該怎么辦呢?)
求解決方案。
 
 
這里是其中的一種解決方案 : 將架構和數據分開處理
————————————————

我們直接說方法,不得不說技術活是的細活。步驟如下:

第一步:生成腳本。數據庫名稱右鍵單擊,以此選擇“任務”->"生成腳本",和標准的生成腳本方法相同,但此處選擇“僅限架構”【見下圖】,導出數據庫對象創建腳本。

 

 

 

第二步:分解腳本。將數據庫表約束創建語句從腳本中剝離出來,腳本中創建約束語句都在一塊,很方便。如下圖:

 

 

 

第三步:先只執行部分腳本。先執行除 “數據庫表約束腳本” 外的腳本,導出數據后最后執行數據庫表約束腳本。

第四步:遷移數據。使用導出(“任務”->"導出")功能,將高版本數據導入到低版本當中。此步驟之前建議備份數據庫,導數據出現錯誤,可以及時還原,重新進行第四步。

第五步:執行剩余腳本。遷移數據成功后,執行數據庫表約束腳本(4-1.表和視圖創建_約束.sql)。
————————————————

 
 

·················

 


免責聲明!

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



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