我們通過下面菜單,就可以在SQL Server Management Studio中,把我們選擇的資料庫中每一個對象都產生指令碼。這對我們做資料庫的版本管理,資料庫的升級文檔都很方便。
在產生指令碼過程中,有很多參數可以選擇,合理的配置這些參數,可以讓我們很方便的按照我們的期望產生指令碼。
產生指令碼的一些選項,如:
我這裡是SQL 2005 的選項, SQL 2008 的選項跟這個稍有差異。
這個差異可以參看下面兩篇文章
SQL Server 2005 的產生 SQL Server 指令碼嚮導(“選擇指令碼選項”頁)
http://technet.microsoft.com/zh-cn/library/ms186472(SQL.90).aspx
SQL Server 2008 的產生 SQL Server 指令碼嚮導(“選擇指令碼選項”頁)
http://technet.microsoft.com/zh-cn/library/ms186472.aspx
參數說明,其中紅色部分是我比較常用的。
常規選項部分:
Ansi Padding
在每個 CREATE TABLE 語句前後添加 SET ANSI_PADDING ON 語句。預設值為 True。
Append to File
將此指令碼添加到現有指令碼的底部,在“輸出選項”頁中指定。預設值為 False,指示新指令碼將覆蓋以前的指令碼。
Continue Scripting on Error
True 指示出錯時停止編寫指令碼。值為 False 時,則繼續編寫指令碼。預設值為 False。
Convert UDDTs to Base Types
值為 True 時,使用者定義資料類型被轉換為用於建立使用者定義資料類型的基礎資料型別 (Elementary Data Type)。將運行指令碼的資料庫中不存在使用者定義資料類型時,請使用 True。預設值為 False,指示將使用 UDDT 為使用者定義資料類型編寫指令碼。
Generate Script for Dependent Objects
產生依賴對象的指令碼
為在執行所選對象的指令碼時必須存在的任何對象產生指令碼。預設值為 True。
Include Descriptive Headers
值為 True 時,說明性注釋被添加到指令碼中,將指令碼分成若干個部分,每個對象為一個部分。預設值為 False。
此項我產生時習慣修改為true,這樣可以看到注釋
Include If NOT EXISTS
值為 True 時,指令碼包含一個用於檢查對象在資料庫中是否已經存在的語句,並在對象已經存在的情況下不嘗試建立新對象。預設值為 True。
Include system constraint names
包含系統產生的約束名稱,以強制宣告式參考完整性。預設值為 False。有
Script Collation
將定序資訊包含在指令碼中。預設值為 False。
參看 http://technet.microsoft.com/zh-cn/library/ms187582(SQL.90).aspx
Script Create
包含每個對象的 CREATE 語句。預設值為 True。
Script Defaults
列存在於原始對象中時包含它們的預設值。預設值為 True。
Script Drop
包含每個對象的 DROP 語句。預設值為 False。
Script Extended Properties
如果對象具有擴充屬性,則在指令碼中包含擴充屬性。預設值為 True。
Script for Server Version
建立可在選定的 SQL Server 版本上啟動並執行指令碼。無法為早期版本編寫 SQL Server 2005 新增功能的指令碼。某些為 SQL Server 2005 建立的指令碼無法在運行 SQL Server 較早版本的伺服器上運行,也無法在具有較早資料庫相容層級設定的資料庫中運行。預設為 SQL Server 2005。
Script Logins
要編寫指令碼的對象是資料庫使用者時,請使用“編寫登入指令檔”選項建立使用者所依賴的登入。預設值為 False。
Script Object-Level Permissions
包含對資料庫中的對象設定許可權的指令碼。預設值為 False。
Script Owner
值為 True 時,CREATE 語句包含當前的對象所有者或架構。值為 False 時,CREATE 語句不包含對象所有者或架構,而且指令碼建立的對象將對正在執行該指令碼的使用者使用預設值。預設值為 True。
如果 true, 比如預存程序名字就可能是 dbo.*** 如果 false,則沒有dbo.這個資訊。我習慣於false。
Script Statistics
設定為“編寫統計資訊指令碼”時,將包含 CREATE STATISTICS 語句以重新建立有關對象的統計資訊。“編寫統計資訊和長條圖指令碼”設定還會建立長條圖資訊。預設為不編寫統計資訊指令碼。
Script USE DATABASE
將 USE DATABASE 語句添加到指令碼中。要確保在正確的資料庫中建立資料庫物件,請包含 USE DATABASE 語句。如果預計指令碼將在其他資料庫中使用,請選擇 False 以省略 USE DATABASE 語句。預設值為 False。
Script VarDecimal Options
包含指令碼的 vardecimal 儲存選項。預設值為 False。
參看 http://technet.microsoft.com/zh-cn/library/bb326755(SQL.90).aspx
表和視圖部分
Script Check Constraints
將 CHECK 條件約束添加到指令碼中。預設值為 True。CHECK 條件約束要求輸入表中的資料滿足某些指定的條件。
Script Foreign Keys
將外鍵添加到指令碼中。預設值為 True。外鍵可指示和強制保持表間的關係。
Script Full-Text Indexes
包含每個表的全文本索引或指令碼的索引檢視表。預設值為 False。
Script Indexes
添加每個表的叢集索引、非叢集索引和 XML 索引,或添加指令碼的索引檢視表。預設值為 False。
Script Primary Keys
添加對錶建立主鍵指令碼。預設值為 True。主鍵可唯一標識表的每一行。
Script Triggers
添加對錶建立觸發器指令碼。預設值為 True。觸發器會在資料被修改時引發操作。
Script Unique Keys
添加對錶建立唯一鍵指令碼。唯一鍵可防止輸入重複的資料。預設值為 True。
其他的一些選項大家都很熟悉,就是讓我們選擇那些資料庫物件要產生。忽略不計。
在產生何種格式時,SQL Server 很方便的給我們提供了一些選項,如下:
這裡可以方便的選擇以 Unicode 或“ANSI 文本”格式將指令碼產生到 .sql 檔案中。
而且可以所有指令碼在一個檔案,也可以每個對象的指令碼在一個自己的檔案。
再後面就是確認產生選項,然後就產生了。
參考資料:
產生 SQL Server 指令碼嚮導的 F1 協助
http://technet.microsoft.com/zh-cn/library/ms181421.aspx
How to: Generate a Script (SQL Server Management Studio)
http://technet.microsoft.com/en-us/library/ms178078.aspx
How can I automate the “generate scripts” task in SQL Server Management Studio 2008 ?
http://stackoverflow.com/questions/483568/how-can-i-automate-the-generate-scripts-task-in-sql-server-management-studio-2008
Microsoft SQL Server Database Publishing Wizard 1.1
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=56e5b1c5-bf17-42e0-a410-371a838e570a