建立和修改資料庫指令碼
資料庫指令碼是額外的檔案,其中包含 Transact-SQL 陳述式或如 SQLCMD 的公用程式,這些不屬於資料庫「結構描述」(Schema) 定義的一部分。 您可以使用資料庫指令碼做為部署步驟的一部分 (「預先部署指令碼」(Pre-Deployment Script) 和「和部署後指令碼」(Post-Deployment Script)),或是將一般管理指令碼儲存到「資料庫專案」(Database Project) 中。
如果您重新命名資料庫物件,則可以使用「資料庫重構」(Database Refactoring) 自動更新指令碼中該物件的任何參考。
部署指令碼
當您建置資料庫專案時,預先部署指令碼、資料庫物件定義和部署後指令碼會編譯成一個資料庫結構描述檔 (.dbschema)。 您只能指定一個預先部署指令碼和一個部署後指令碼,但是可以使用 SQLCMD 從這兩個程式碼內包含其他指令碼。 如需詳細資訊,請參閱在預先部署或部署後步驟中包含多個指令碼。 當您建置資料庫專案時,所有包含的指令碼會合併到建置指令碼中。
根據預設,您的資料庫專案會包含空的預先部署指令碼和空的部署後指令碼。 這些指令碼會命名為 script.predeployment.sql 和 script.postdeployment.sql。
若要指定預先部署指令碼,請將指令碼檔的 Build Action 屬性設為 PreDeploy。 同樣地,若要指定部署後指令碼,請將指令碼檔的 Build Action 屬性設為 PostDeploy。 如果您將指令碼指定為預先部署或部署後指令碼,然後以同樣方式指定另一個指令碼,則第一個指令碼的建置動作會自動設定為 [不在組建中]。 這是根據設計的行為,因為每一個資料庫專案只能有一個預先部署指令碼和一個部署後指令碼。
重要事項 |
---|
如果您變更部署指令碼所參考物件的名稱或特性,但是未更新指令碼中的參考,則部署可能會失敗。 例如,您可能會將資料插入部署後指令碼中的資料表。 如果您重新命名資料表,但是未更新指令碼,則 INSERT 陳述式將會失敗。 如果您使用重新命名重構來重新命名此資料表,則部署指令碼將會更新。 |
在預先部署或部署後步驟中包含多個指令碼
若要在預先部署或部署後步驟中使用多個指令碼,您必須使用下列陳述式,指定包含預先部署或部署後指令碼的最上層指令碼:
SQLCMD :r .\FileName.sql
其他指令碼
除了部署指令碼,您也可以將其他一般用途的指令碼加入到資料庫專案。 您可以在資料庫專案的 [Scripts] 資料夾下建立子資料夾,以組織這些指令碼。 當您在 Transact-SQL 編輯器中開啟任一個指令碼時,可以連接到資料庫伺服器並執行全部或部分指令碼。 如果您執行例行稽核指令碼,則此方法方便您將每個指令碼與相關聯的資料庫放在一起,並且將指令碼和資料庫放入與資料庫結構描述相同的版本控制系統下。 這些指令碼會將 Build Action 屬性設為 [不在組建中]。
一般工作
下表列出支援此案例之一般工作的說明,以及詳細資訊的連結,這些資訊可幫助您成功完成這些工作。
工作 |
支援內容 |
---|---|
指定預先部署或部署後指令碼:您可以將 Transact-SQL 陳述式加入至部署資料庫之前或之後執行的指令碼。 當您從資料庫匯入物件和設定時,部署指令碼可能會以未表示為資料庫物件的陳述式更新,例如權限、角色定義或簽章。 |
|
指定管理或公用程式指令碼:您可以將管理和公用程式指令碼加入至資料庫專案。 您還可以在重構資料庫專案中的物件時更新指令碼。 |
|
簽入變更:您可以將指令碼簽入版本控制中,以便與小組共用。 將指令碼放到版本控制下之後,如果必須維修版本,就可以儲存和擷取符合舊版資料庫的部署和維護指令碼。 |
|
疑難排解問題:您可以了解如何透過資料庫和「伺服器專案」(Server Project) 疑難排解常見的問題。 |
相關案例
建立和修改資料庫與伺服器物件
您可以在修改專案中的物件定義時,更新資料庫或伺服器,然後將變更部署到「目標」(Target) 資料庫或伺服器。重構資料庫程式碼和資料
您可以使用資料庫重構消除某些重複和容易發生錯誤的工作,例如重新命名物件的所有參考、完整限定名稱、擴充萬用字元,或是將物件移到新的結構描述。建置和部署資料庫到隔離的開發環境
在您修改專案中的物件之後,建置變更並且部署到「隔離的開發環境」(Isolated Development Environment)。分析資料庫程式碼以改善程式碼品質
您可以分析資料庫程式碼,以找出和修正常見的設計、命名和效能問題。