資料庫指令碼概觀
更新:2007 年 11 月
資料庫指令碼是額外的檔案,其中包含 Transact-SQL (T-SQL) 陳述式或如 SQLCMD 的公用程式,這些不屬於資料庫「結構描述」(Schema) 定義的一部分。您可以使用資料庫指令碼做為部署步驟的一部分 (預先部署和部署後指令碼),或可以是儲存在「資料庫專案」(Database Project) 中的一般管理指令碼。
在對結構描述物件執行「資料庫重構」(Database Refactoring) 作業期間,如果指令碼包含重新命名的資料庫物件,您可以自動更新這些指令碼。
[指令碼] 資料夾支援下列動作:
加入新項目
加入資料夾
加入指令碼
從專案移除
版本控制動作 (例如簽入、簽出等)
剪下
複製
刪除
重新命名
屬性
[指令碼] 資料夾內包含的指令碼支援下列動作:
開啟
開啟方式
從專案移除
版本控制動作 (例如簽入、簽出等)
剪下
複製
刪除
重新命名
屬性
部署指令碼
當您建置資料庫專案時,預先部署指令碼、資料庫物件定義和部署後指令碼會合併為一個建置指令碼。您只能指定一個預先部署指令碼和一個部署後指令碼,但可以在預先部署指令碼和部署後指令碼內包含其他指令碼。請使用 SQLCMD 來包含這些其他指令碼 (請參閱本主題稍後的相關章節)。當您建置資料庫專案時,所有包含的指令碼會合併到建置指令碼中。
若要指定預先部署指令碼,請將指令碼檔的建置動作屬性設為 PreDeploy。同樣地,若要指定部署後指令碼,請將指令碼檔的建置動作屬性設為 PostDeploy。當您將指令碼指定為預先部署或部署後指令碼時,如果之前已經使用該建置動作指定另一個指令碼,則另一個指令碼會將它的建置動作自動設為 [不在組建中]。這項行為是根據設計,因為每一個資料庫專案只能有一個預先部署指令碼和一個部署後指令碼。
當您匯入資料庫結構描述時,大多數結構描述資料都會匯入到資料庫專案中的資料庫物件定義。部分資訊 (例如登入、權限、規則及預設值) 則改為匯入其他預先部署或部署後指令碼。當這項作業執行時,在資料庫專案的 [指令碼] 資料夾內,[預先部署] 或 [部署後] 子資料夾中會建立其他檔案。這些其他的指令碼檔會視情況包含在預先部署和部署後指令碼中。包含的指令碼會將建置動作屬性設為 [不在組建中],因為這些指令碼並不是直接包含在組建中,而是間接透過預先部署或部署後指令碼包含在組建中。任何無法辨識的指令碼陳述式都會放到 [指令碼] 資料夾的 ScriptsIgnoredOnImport.sql 檔中。
重要事項: |
---|
如果您的部署指令碼參考資料庫物件,而資料庫物件的名稱或特性稍後變更,您必須手動修改部署指令碼,否則部署將會失敗。例如,假設有規則和預設值繫結至資料表,而您重新命名該資料表,但沒有更新部署指令碼,那麼除非修改指令碼,否則繫結將會失敗。如果您使用重新命名重構來重新命名此資料表,則會在重構作業中更新部署指令碼。 |
匯入資料庫結構描述和預先部署指令碼
根據預設,檔案 script.predeployment.sql 是主要預先部署指令碼。當您建立資料庫專案時,會自動建立這個一開始為空檔案的指令碼。當您匯入資料庫結構描述時,可能會自動在預先部署指令碼的相同資料夾中建立其他指令碼。如果建立其他指令碼,會在 script.predeployment.sql 檔案加入陳述式,以包含其他指令碼。若要指定不同的檔案做為預先部署指令碼,可以將該檔案的建置動作屬性設為 PreDeploy。
注意事項: |
---|
您只能將一個預先部署指令碼的建置動作屬性設為 PreDeploy。若要在預先部署步驟中使用多個指令碼,您必須使用下列陳述式,指定一個最上層的預先部署指令碼,使其包含其他預先部署指令碼:SQLCMD :r.\FileName.sql。 |
重要事項: |
---|
您必須手動修改預先部署指令碼,才能在結構描述匯入作業期間無法匯入重新建立物件的足夠資訊時,建立任何物件。例如,您必須修改此指令碼,以建立加密金鑰和憑證。 |
當您匯入資料庫結構描述時,會產生下表中的指令碼檔:
檔名 |
順序 |
備註 |
||
---|---|---|---|---|
Logins.sql |
第一 |
這個指令碼包含來源資料庫中定義的所有 Microsoft SQL Server 登入定義。登入的指令碼是使用 Microsoft SQL Server 2005 中的 CREATE LOGIN 和 SQL Server 2000 中的 sp_addlogin 編寫的。 |
||
LinkedServers.sql |
第二 |
這個指令碼包含建立連結伺服器的陳述式 (如需詳細資訊,請參閱 Microsoft 網站上的連結伺服器)。當您匯入資料庫結構描述時,指令碼會針對來源資料庫中的每個連結伺服器加入一個 sp_addlinkedserver 陳述式。 |
||
CustomErrors.sql |
第三 |
這個指令碼包含使用者定義的錯誤訊息。當您匯入資料庫結構描述時,指令碼會針對來源資料庫中定義的每個自訂錯誤訊息,加入一個 sp_addmessage 陳述式。 |
||
EncryptionKeysAndCertificates.sql |
第四 |
這個指令碼包含來源資料庫中每個 CREATE SYMMETRIC KEY、CREATE ASYMMETRIC KEY、CREATE MASTER KEY 和 CREATE CERTIFICATE 陳述式的預留位置。
|
匯入資料庫結構描述和部署後指令碼
根據預設,檔案 script.postdeployment.sql 是主要部署後指令碼。當您建立資料庫專案時,會自動建立這個一開始為空檔案的指令碼。當您匯入資料庫結構描述時,可能會建立其他指令碼。如果建立其他指令碼,會在 script.postdeployment.sql 檔案加入陳述式,以包含其他指令碼。若要指定不同的檔案做為部署後指令碼,可以將該檔案的建置動作屬性設為 PostDeploy。
注意事項: |
---|
您只能將一個部署後指令碼的建置動作屬性設為 PostDeploy。若要在部署後步驟中使用多個指令碼,您必須使用下列陳述式,建立一個最上層的部署後指令碼,其中再包含其他部署後指令碼:SQLCMD :r.\FileName.sql。 |
重要事項: |
---|
您可能需要手動修改部署後指令碼,才能在結構描述匯入作業期間無法匯入用來重新建立或修改物件的足夠資訊時,建立或更新任何物件。讓使用者與角色產生關聯就是一個範例。 |
當您匯入資料庫結構描述時,會產生下表中的指令碼檔:
檔名 |
順序 |
備註 |
---|---|---|
Storage.sql |
第一 |
此指令碼包含與儲存物件 (如檔案和檔案群組) 有關的定義。 |
Permissions.sql |
第二 |
這個指令碼包含目標資料庫的任何 GRANT、REVOKE 或 DENY 權限。當您匯入資料庫結構描述時,針對來源資料庫中指定的任何權限,會在 Permissions.sql 中加入陳述式。 |
RoleMemberships.sql |
第三 |
這個指令碼包含任何 sp_addrolemember 陳述式,以用來將使用者與角色建立關聯。 |
RulesAndDefaults.sql |
第四 |
這個指令碼包含定義目標資料庫規則和預設值的其他陳述式。當您匯入資料庫結構描述時,會在 RulesAndDefaults 指令碼加入其他陳述式,以將規則和預設值繫結至資料行或別名資料型別,以及加入安全性帳戶做為資料庫中現有 SQL Server 資料庫角色的成員。如需將加入指令碼的陳述式,請參閱下表。 |
DatabaseObjectOptions.sql |
第五 |
這個指令碼包含在發生部署之後套用到資料庫物件的選項。 |
Signatures.sql |
第六 |
這個指令碼包含目標資料庫的任何簽章定義。當您匯入資料庫結構描述時,Signatures.sql 指令碼會針對來源資料庫中定義的每個簽章,加入其他陳述式。 注意 這個指令碼只適用於 SQL Server 2005。 |
規則、預設值和安全性帳戶會使用下列陳述式加入:
若要 |
SQL Server 2005 |
SQL Server 2000 |
---|---|---|
將規則繫結至資料行或別名資料型別 |
ALTER TABLETableNameADD CONSTRAINTConstraintNameCHECK |
sp_bindrule |
將預設值繫結至資料行或別名資料型別 |
ALTER TABLETableNameADD CONSTRAINTConstraintNameDEFAULT |
sp_binddefault |
加入安全性帳戶做為現有 SQL Server 資料庫角色的成員 |
sp_addrolemember |
sp_addrolemember |
其他指令碼
除了部署指令碼,您也可以將其他一般用途的指令碼加入到資料庫專案。您可以在資料庫專案的指令碼資料夾中加入子資料夾,協助組織這些其他指令碼。當您在 T-SQL 編輯器中開啟這些其他指令碼時,可以連接到資料庫伺服器,然後執行全部或部分指令碼。例如,假設您有需要執行的例行稽核指令碼,此方法就能很方便將每個指令碼與相關聯的資料庫放在一起,而且也能將這些指令碼加入與資料庫結構描述相同的版本控制系統。這些指令碼會將建置動作屬性設為 [不在組建中]。
請參閱
工作
HOW TO:將 Management 指令碼加入資料庫專案