·
下方直接用一個例子來引起話題:
SQL Server生成SQL腳本丟失了默認值和外鍵的問題
SQL Server在生成SQL Scripts(SQL 腳本)的時候,默認是沒有默認值和外鍵等的。
具體解決的方法如下:
1、生成SQL腳本的時候在“常規”標簽選擇“全部顯示”,再選上“編寫全部對象腳本”。
2、在“選項”標簽頁里,選中表腳本選項的所有內容,包括:
-編寫索引腳本
-編寫全文索引腳本
-編寫觸發器腳本
-編寫主鍵、外鍵、默認值、和檢查約束腳本這樣生成的SQL腳本就包括了主鍵、外鍵、默認值、和檢查約束腳本等了。
不知道是受SQLSERVER2000,2005的影響還是,Next的慣性思維,在使用數據庫“生成腳本”的時候基本上不會太多關注里面的配置選項,但其實從SQLSERVER2008開始,微軟在生成腳本這方面做了很大的改進,讓用戶自己選擇配置的東西更多了。
例如經常用到的一個是:從一個數據庫將數據導入另一個庫,或者向下兼容還原,以前操作很麻煩的,導入導出,鏈接等等。我自己是經常用第三方軟件生成Insert 的SQL,然后到目的數據庫執行,當然數據不是太多的情況,這是種比較快速的方法。
剛好最近在做數據庫遷移時,用到了“生成數據腳本”這個功能,目的就是實現生成Insert SQL的方式還原數據庫。
那我們來看下SQLSERVER2008的“生成腳本”功能,不知道大家有沒有詳細看看里面的配置,沒有的話剛好一起看下:
導出的sql語句:
上圖用紅框標記的是比較常用的功能,你是否有注意到呢?
通過這些配置,基本上可以復制一個數據庫的所有SQL,輕松實現數據庫不同版本雙向復制。
這個問題幫我一個大忙呀,不然又要徒勞的寫一個重復的功能到Sqlserver上,看來以后配置的地方還是要多留意下的。
分析說明:
我們直接說方法,不得不說技術活是的細活。步驟如下:
第一步:生成腳本。數據庫名稱右鍵單擊,以此選擇“任務”->"生成腳本",和標准的生成腳本方法相同,但此處選擇“僅限架構”【見下圖】,導出數據庫對象創建腳本。
第二步:分解腳本。將數據庫表約束創建語句從腳本中剝離出來,腳本中創建約束語句都在一塊,很方便。如下圖:
第三步:先只執行部分腳本。先執行除 “數據庫表約束腳本” 外的腳本,導出數據后最后執行數據庫表約束腳本。
第四步:遷移數據。使用導出(“任務”->"導出")功能,將高版本數據導入到低版本當中。此步驟之前建議備份數據庫,導數據出現錯誤,可以及時還原,重新進行第四步。
第五步:執行剩余腳本。遷移數據成功后,執行數據庫表約束腳本(4-1.表和視圖創建_約束.sql)。
————————————————
·················
但是很直接的用經驗告訴你,如果想生成帶數據的腳本,比如說sqlserver2008生成sqlserver2000的腳本,或者sqlserver2005的腳本,這個工具生成的代碼比較機械化,很多內容其實前后沖突,比如說建立外鍵關系,而且生成低版本的腳本,甚至有錯誤。 導致數據庫還原失敗甚至是缺漏還原,根本無法正常使用。