摘要:SQL Server 2005 - 如何產生資料庫的 SQL 指令碼
大家必須有一個觀念,您於 SQL Server Management Studio 此一強有力之管理工具中所進行的任何操作(例如:建立資料庫),都能夠透過相對應的系統預存程序或Transact-SQL陳述式而以程式控制方式來完成。問題在於,您有沒有必要放著好好的工具不用,硬要以寫程式的方式來進行,我想這端視您本身的需求與工作性質而定。不過基本上,完整的基礎建置作業會由系統管理人員以 SQL Server Management Studio 來完成,然而於系統執行期間的動態設定作業,亦或是您想要於前端應用程式中去執行某些管理性作業,就必須去呼叫後端 SQL Server 的系統預存程序或 Transact-SQL 陳述式來完成。很顯然,同一項作業,有多種方法去實踐,您會不會是一回事,但是至少必須知道可以有多種途徑。
而所謂產生資料庫的 SQL 指令碼(Script),也就是產生出能夠建立現有資料庫中各個資料庫物件的SQL命令敘述,它有點逆向工程的味道。可以在 SQL Server Management Studio 查詢編輯器中,或使用任何文字編輯器就可以檢視 SQL 指令碼。產生資料庫之 SQL 指令碼最主要的目的不外乎是下列各項:
重新建立一個與某資料庫之架構完全相同的資料庫。比方說,您在伺服器 A 中已建立了一個資料庫 Trade,而想要在伺服器 B 上建立一個與資料庫 Trade 之架構完全相同的資料庫,欲達此目的,只需先於伺服器 A 上產生資料庫 Trade 的 SQL 指令碼,然後於伺服器 B 上執行此 SQL 指令碼,便能夠建立出一個架構完全相同的資料庫。
- 重新建立一個與某資料庫之架構完全相同的資料庫。比方說,您在伺服器A中已建立了一個資料庫Trade,而想要在伺服器B上建立一個與資料庫Trade之架構完全相同的資料庫,欲達此目的,只需先於伺服器A上產生資料庫Trade的SQL指令碼,然後於伺服器B上執行此SQL指令碼,便能夠建立出一個架構完全相同的資料庫。
- 維護一個備份指令碼,以便允許使用者去重建所有的使用者、群組、登入帳戶、與權限。
- 建立或更新資料庫開發程式碼。
- 根據現有的架構去建立一個測試或開發環境。
- 訓練新進人員。事實上產生出的 SQL 指令碼,可以說是學習相關 Transact-SQL 陳述 式的最佳學習範本。
SQL 指令碼會包含建立資料庫所內含之各個物件的命令敘述,而且還會加註說明,如果您執行整個 SQL 指令碼,便會重建所有的資料庫物件,但是您亦可只抽取出其中一段用來建立某資料庫物件的命令敘述來執行,以便於其他資料庫中建立此資料庫物件。
比方說,假設我想要產生 SQL Server 範例資料庫 AdventureWorks 的 SQL 指令碼,請依下列步驟進行:
1. 如圖表 1 所示,於 SQL Server Management Studio 中,使用滑鼠右鍵按一下「物件總管」視窗裡的資料庫 AdventureWorks,並從快顯功能表中選取「工作」指令,再從此指令所拉出之附屬表單中選取「產生指令碼」指令。
另外一種方式為使用滑鼠在「摘要」視窗按一下 AdventureWorks 資料庫,接著按一下滑鼠右鍵,從快顯功能表中選取「工作」指令,接著選取「產生指令碼」指令(如圖表 2 所示)。
圖表1
圖表2
2. 此時「指令碼精靈」對話方塊應該已開啟於畫面上(如圖表 3 所示),首先您必須於「歡迎使用產生SQL Server指令碼精靈」頁面中,按一下「下一步」按鈕以便進入「選取資料庫」對話方塊。
圖表 3
3. 如圖表 4 所示,先選擇您要建立指令碼的資料庫,此處我們選取 AdventureWorks 資料庫。
如果您希望要產生所有資料表、檢視表、預存程序、預設值、規則、使用者自訂資料型別、與使用者自訂函數的 Transact-SQL 建立敘述,請勾選核取方塊 □ 編寫選取之資料庫中所有物件的指令碼,此時您可以發現到「完成」按鈕已經有作用了,表示您可以略過中間很多設定步驟,而這些步驟的設定值都會採用預設的設定,因此當您按下「完成」按鈕之後,就會直接開啟「指令碼精靈摘要」對話方塊。但是如果您要個別決定特定種類之資料庫物件的Transact-SQL建立敘述是否要被產生,請不要勾選核取方塊 □ 編寫選取之資料庫中所有物件的指令碼。
為了後續可以看到所有資料庫物件最詳細的選項設定,我們不打算勾選核取方塊 □ 編寫選取之資料庫中所有物件的指令碼。
圖表4
圖表5
4. 接下來,請使用滑鼠按一下「下一步」按鈕以便切換至圖表5所示的對話方塊來設定指令碼選項。您可以在每個選項右方的清單方塊中,設定您要的選項,這些選項的設定說明會出現在下方的描述窗格中。當您完成這個對話方塊的設定,SQL Server 會將這些設定套用到所有要編寫指令碼的物件上。
可以設定的選項分成兩大項,一般跟資料表/檢視選項,各選項的詳細說明如下:
□ 包含 If NOT EXISTS
假如您要加入 If NOT EXIST 指令碼來檢查物件是否存在,請從下拉選單中選取 True;但是如果您不要加入 If NOT EXIST 指令碼檢查的話,請從下拉選單中選取 False。
□ 包含描述性標頭
假如您希望儘可能在所產生之 SQL 指令碼中的各個命令敘述前加上說明註解,請從下拉選單中選取 True。筆者建議您設定成 True,因為此舉可幫助您更瞭解各個命令敘述所執行的作業。
□ 附加至檔案
假如您希望將產生的指令碼附加到檔案最後面時,請從下拉選單中選取 True。
□ 針對伺服器版本編寫指令碼
假如您希望產生與 SQL Server 2005 相容的指令碼,請從下拉選單中選取 SQL Server 2005;但是如果您要產生與 SQL Server 2000 相容的指令碼,請從下拉選單中選取 SQL Server 2000。
□ 將 UDDT 轉換為基底類型
假如您要將每一個使用者自訂資料型別轉換成SQL Server提供的原生型別,請從下拉選單中選取 True。建議您將這個選項設定成 False,避免日後還需要將原生型別轉換成使用者自訂資料型別。
□ 產生相依物件的指令碼
假如您要將每一個物件之相依的物件產生指令碼,請從下拉選單中選取 True。
□ 發生錯誤時繼續編寫指令碼
假如在進行編寫指令碼時發生錯誤,但是仍要繼續執行後續的編寫指令碼,請從下拉選單中選取 True;但是如果您要終止繼續產生編寫指令碼的話,請從下拉選單中選取 False。
□ 對資料庫建立編寫指令碼
假如在編寫整個資料庫時,您希望可以產生 CREATE DATABASE 陳述式,請從下拉選單中選取 True。筆者建議您將這個選項設定成 True,此舉可以讓您更加瞭解 CREATE DATABASE 陳述式的語法。
□ 編寫 USE DATABASE 的指令碼
假如您需要 SQL Server 幫您建立將某資料庫設定成作用資料庫的 USE 陳述式,請從下拉選單中選取 True,此舉可以讓您於執行編寫的指令碼時,避免在錯誤的資料庫中執行,而造成不可彌補的錯誤。
□ 編寫行為的指令碼
假如只要產生 CREATE 的編寫指令碼時,請從下拉選單中選取「只產生CREATE陳述式」。;如果僅要產生 DROP指令碼的話,則請從下拉選單中選取「只產生DROP陳述式」。
□ 編寫定序的指令碼
假如您想將讓定序的設定也同時產生在指令碼時,請從下拉選單中選取 True,此舉可以確保定序設定會跟隨資料庫物件一起產生。
附註:
關於 Microsoft® SQL Server™ 2005 的定序觀念,請參閱「SQL Server 2005完全實戰」一書的附錄三。
□ 編寫物件層級權限的指令碼
假如您從下拉選單中選取 True,此舉將為各個資料庫物件產生權限設定的 Transact-SQL 陳述式。
□ 編寫統計資料的指令碼
統計資料僅適用於資料表或檢視表(Views),假如您要建立資料表或檢視的統計資料與長條圖時,請從下拉選單中選取「編寫統計資料和長條圖的指令碼」;假如您只想蒐集統計資料的話,請從下拉選單中選取「編寫統計資料的指令碼」;但是如果您不想啟用統計資料的功能,請從下拉選單中選取「不要編寫統計資料的指令碼」。
□ 編寫登入的指令碼
假如您希望替所有能夠存取伺服器的登入帳戶產生登入 SQL Server 的 Transact-SQL 建立敘述,請從下拉選單中選取 True,此舉會建立 CREATE LOGIN 的陳述式。
□ 編寫擁有者的指令碼
假如您希望替物件擁有者產生類似如下所示的 Transact-SQL建立敘述,請從下拉選單中選取 True:
CREATE TABLE [章立民研究室].[Customers](
[CustomerID] [nchar] (5) NOT NULL,
[CompanyName] [nvarchar] (40) NOT NULL,
[Fax] [nvarchar] (24) NULL)
GO
□ 編寫擴充屬性的指令碼
SQL Server 可以在物件(例如:資料庫、資料表、檢視)加上擴充屬性,假如要產生這些 EXEC sys.sp_addextendedproperty 擴充屬性的指令碼,請從下拉選單中選取 True。
□ 編寫主索引鍵的指令碼
假如您要對資料表或是檢視產生主索引鍵的指令碼,請從下拉選單中選取 True。
□ 編寫外部索引鍵的指令碼
假如您要對資料表產生外部索引鍵的指令碼,請從下拉選單中選取 True。
□ 編寫全文檢索索引的指令碼
假如您要將資料表或索引檢視的全文檢索索引內含在您建立的 SQL 指令碼中,請從下拉選單中選取 True。
□ 編寫索引的指令碼
如果您所選取的資料庫中有某些資料表或索引檢視(包含 XML 和叢集索引)擁有相關的唯一索引鍵,您要將建立這些索引的陳述式內含在您建立的 SQL 指令碼中,請從下拉選單中選取 True。
□ 編寫唯一索引鍵的指令碼
如果您所選取的資料庫中有某些資料表或檢視擁有相關的唯一索引鍵,在此種狀況下,請從下拉選單中選取 True,將會產生用來建立這些索引的 CREATE INDEX 陳述式。
□ 編寫檢查條件約束的指令碼
如果您所選取的資料庫中有某些資料表或檢視擁有相關的唯一索引鍵,在此種狀況下,請從下拉選單中選取 True,將會產生用來建立這些索引的 Transact-SQL 陳述式。
□ 編寫觸發程序的指令碼
如果您所選取的資料庫中有某些資料表或檢視擁有觸發程序,在此種狀況下,請從下拉選單中選取 True,將會產生用來建立這些觸發程序的 CREATE TRIGGER 陳述式。
5. 現在,請使用滑鼠按一下「下一步」按鈕,您將看到如圖表6所示的對話方塊,在此處您可以選擇要產生指令碼的物件類型。為了方便解說,我們按下「全選」按鈕,接著按一下「下一步」按鈕。
請注意:
您必須至少選取一個要編寫指令碼的物件類型,您才能按下「下一步」按鈕以便繼續下一個對話方塊的設定。
圖表6
6. 接下來,如圖表7所示,請依序在「選擇資料庫(DDL)觸發程序」、「選取結構描述」、「選取預存程序」、「資料表」、「選擇使用者自訂資料類型」、「選擇使用者自訂函數」、「選擇檢視」與「選擇XML結構描述集合」對話方塊中選取要產生指令碼的項目,接著請使用滑鼠按一下「下一步」按鈕。
圖表7
7. 緊接著,您必須設定指令碼精靈輸出的目的地(如圖表8所示),在預設狀態下,選項鈕 ○ 編寫指令碼至新增查詢視窗 會被選取,此表示所產生的指令碼會顯示在「查詢編輯器」視窗中,如果您沒有開啟「查詢編輯器」視窗,則SQL Server會自動開啟一個新的「查詢編輯器」視窗,並將產生的指令碼顯示在此視窗中。
如果您希望將指令碼存檔成 .sql 檔案,請選取選項鈕 ○編寫指令碼至檔案。此時,請先按一下「瀏覽」按鈕來指定檔案的目錄與名稱,接著設定檔案的格式。如果您要將檔案存檔成Unicode格式的話,請選取「另存新檔」旁的選項鈕 ○ Unicode文字;但是如果您希望將檔案存檔成一般的格式時,請選取選項鈕 ○ ANSI文字。
如果您只希望將產生的指令碼儲存到剪貼簿,以供貼上指令碼之用的話,請選取選項鈕 ○ 編寫指令碼至剪貼簿。
當您完成指令碼精靈輸出的目的地設定之後,請使用滑鼠按一下「下一步」按鈕。
圖表8
8. 恭喜您終於完成所有設定,最後所要做的,就是再確認先前所做的設定是否正確。請如圖9所示,按一下加號(+)以展開先前各項設定對話方塊的選項。確認設定沒有問題之後,請使用滑鼠按一下「完成」按鈕。接著「指令碼精靈」便會開始產生指令碼,當您看到「產生指令碼進度」視窗中顯示
圖表9
圖表10