共用方式為


VSDBCMD.EXE 的命令列參考 (部署和結構描述匯入)

更新:2010 年 7 月

您可以使用 VSDBCMD.EXE 進行下列動作:

  • 將即時資料庫的資料庫結構描述匯入到 .dbschema 檔案

  • 從 .dbschema 檔案取得部署指令碼

  • 從 .dbschema 檔案產生部署指令碼,並將該指令碼部署到目標資料庫

  • 透過比較兩個 .dbschema 檔案產生部署指令碼。

此外,您可以指定選項來自訂部署或匯入您資料庫的方式。

如需如何使用此工具的詳細資訊,請參閱 HOW TO:使用 VSDBCMD.EXE 從命令提示字元準備資料庫進行部署HOW TO:從命令提示字元匯入結構描述

重要事項重要事項

您無法使用 VSDBCMD.EXE 部署資料層應用程式元件 (DAC) 專案,或將結構描述匯入 DAC 專案。

一般選項

下表中的選項會套用到「部署」和「匯入」動作。

選項

簡短形式

是否為必要項?

備註

/Action:{Import|Deploy}

/a:{Import|Deploy}

指定是否要將物件與設定匯入至 .dbschema 檔案,或是否要將 .dbschema 檔部署至目標伺服器或資料庫。

/ConnectionString:"String"

/cs:"String"

指定對目標資料庫的連線字串。 例如,您可能會指定 /cs:"Data Source=MyDatabase/SQL2K8;Integrated Security=True;Pooling=False;Initial Catalog=AdventureWorks2008"。 若要匯入結構描述,您必須使用 Initial Catalog 指定資料庫名稱。 如需連接字串語法的詳細資訊,請參閱連接字串語法 (ADO.NET)

/DatabaseSchemaProvider:DspName

/dsp:DspName

指定您要連線的資料庫結構描述提供者類型。 例如,針對 SQL Server 使用 /dsp:SQL。

@File

無法使用

您可以指定包含一個或多個命令列選項的回應檔。

/Quiet[+|-]

/q

指定您是否要抑制 VSDBCMD 的詳細回饋。

/DeployToDatabase[+|-]

/dd

指定您想要產生部署指令碼,並將它部署至目標資料庫。 如果您未指定此選項,則會產生部署指令碼,但不會部署該指令碼。

/ModelFile:FileName

/model:FileName

指定您要部署或當您匯入結構描述時要建立的 .dbschema 檔案名稱。 如果指定部署資訊清單,這就不是必要的。

/Properties:PropertyName=PropertyValue

/p:PropertyName=PropertyValue

指定屬性名稱,以及您想要在命令提示字元中覆寫的值。 如需了解這些動作特定的屬性,請參閱部署選項和匯入選項。

部署選項

只有當您部署.dbschema 檔案時才會套用下表的選項。

選項

簡短形式

是否為必要項?

備註

/ManifestFile:FileName

/manifest:FileName

指定在您部署資料庫使用時會使用部署資訊清單檔。 當您建置資料庫專案時,會在建置輸出路徑中建立部署資訊清單。

注意事項注意事項
如果部署資訊清單檔案參考已經存在而且是唯讀的輸出指令碼檔,部署將會失敗。

/DeploymentScriptFile:FileName

/script:FileName

指定您要提供給部署指令碼的名稱。

/ExtensionArguments

/ext:String

指定要傳遞至自訂部署參與者的參數其名稱/值組。

/TargetModelFile: FileName

/targetmodel: FileName

指定要與來源 .dbschema 檔案比較的目的 .dbschema 檔案。 當您想要透過比較兩個 .dbschema 檔案產生部署指令碼時,請使用這個選項。 如需詳細資訊,請參閱使用 VSDBCMD.EXE 比較結構描述

注意事項注意事項

當您建立累加部署指令碼時,來源和目標資料庫的名稱必須相符。

覆寫命令列上個別的 SQLCMD 變數

您可以使用下列語法來覆寫單一 SQLCMD 變數的值:

/p: SqlCmdVariableName = Value

如果您指定在 .sqlcmdvars 檔案中未宣告的變數名稱,將會發生錯誤。

您可以在以下列順序套用的三個點指定 SQLCMD 變數:

  1. 在設計階段,由 .deployment 資訊清單所指向的 Database.sqlcmdvars

  2. 在命令列上藉由指定 /p:SqlCommandVariablesFile = Filepath

  3. 在命令列上藉由指定特定的變數名稱和值

第二個方法會覆寫第一個方法,第三個方法會覆寫第二個和第一個方法。

常見的部署屬性

當您在命令提示字元部署 .dbschema 檔案時,可以下列表格中指定屬性。

選項

預設值

備註

/p:AbortOnFirstError={True|False}

True

指定在出現第一個錯誤時是否應取消部署。

/p:AlwaysCreateNewDatabase={True|False}

False

指定是否更新資料庫,或它是否應該卸除並在您部署變更時重新建立。

/p:AnsiNulls={True|False}

在來源模型中預設為此設定的值

指定 ANSI_NULLS 連線設定。 此設定會覆寫模型中的值

/p:AnsiPadding={True|False}

在來源模型中預設為此設定的值

指定 ANSI_PADDING 連線設定。 此設定會覆寫模型中的值。

/p:AnsiWarnings={True|False}

在來源模型中預設為此設定的值

指定 ANSI_WARNINGS 連線設定。 此設定會覆寫模型中的值。

/p:ArithAbort={True|False}

在來源模型中預設為此設定的值

指定 ARITH_ABORT 連線設定。 此設定會覆寫模型中的值。

/p:BlockIncrementalDeploymentIfDataLoss={True|False}

True

指定如果可能遺失資料的話,是否要部署停止。

/p:CheckNewConstraints={True|False}

True

指定當建立或重新建立限制時,是否預設使用 NOCHECK 選項來建立這些限制。 在部署指令碼的結尾,將會加入陳述式區塊,而該陳述式區塊會將所有條件約束視為一組進行檢查。 將這個屬性設定為 True,即可將資料檢查延後到部署指令碼的結尾,當您部署結構描述時,就不會在部署過程中遇到由於檢查或外部索引鍵條件約束所引起的資料錯誤。

/p:CollationPreference={UseSourceModelCollation | UseTargetModelCollation }

UseSourceModelCollation

指定當比較來源和目標模型時所使用的定序。

/p:CommentOutSetVarDeclarations={True|False}

False

指定您是否要讓指定變數值的 SETVAR 陳述式在部署指令碼中加上註解。 如果您想使用 SQLCMD 部署指令碼,而且您想要在命令提示字元中指定那些變數的值,可以將此屬性設為 True。

/p:ConcatNullYieldsNull={True|False}

在來源模型中預設為此設定的值

指定 CONCAT_NULL_YIELDS_NULL 連線設定。 此設定會覆寫模型中的值。

/p:DeployDatabaseProperties={True|False}

True

指定資料庫屬性應設定或更新為部署指令碼的一部分。

/p:DeploymentCollationPreference={UseSourceModelCollation|UseTargetModelCollation|DontChangeCollations}

DontChangeCollations

此設定會要求在部署期間處理資料庫定序的方式。 有三個可能的值:UseSourceModelCollation 表示如果不符合來源所指定的定序時將會更新目標資料庫定序。 UseTargetModelCollation 表示應使用目標資料庫 (或伺服器) 定序。 DontChangeCollations 指示不應變更伺服器的定序。

/p:DeploymentConfigurationFile=fileName

在 .deploymanifest 檔中指定的 .sqldeployment 檔案。

指定當部署時您想要使用 .sqldeployment 檔案。

/p:DisableAndReenableDdlTriggers={True|False}

True

指定是否在部署處理序開始時停用資料定義語言 (DDL) 觸發程序,然後在部署處理序結束時重新啟用。

/p:DoNotUseAlterAssemblyStatementsToUpdateCLRTypes={True|False}

False

指定如果沒有差異,則部署應一律卸除,並重新建立組件,而非發出 ALTER ASSEMBLY 陳述式。

/p:DropConstraintsNotInSource={True|False}

True

指定當您將更新部署到資料庫時,是否要從目標資料庫中卸除資料庫專案中不存在的條件約束。

/p:DropIndexesNotInSource={True|False}

True

指定當您將更新部署到資料庫時,是否要從目標資料庫中卸除資料庫專案中不存在的索引。

/p:EnforceMinimalDependencies={True|False}

False

指定是否剖析和解譯程序、純量函式和資料表值函式的主體。 如果啟用這項設定,則不會識別主體內的相依性,但是會識別物件的定義變更。 將這個選項設定為 True,可能會改善效能,但是遺漏的相依性可能會在部署時造成問題。

/p:GenerateDatabaseOptions={True|False}

True

指定部署指令碼是否應該包含當您在部署資料庫時可設定資料庫選項的陳述式。

/p:GenerateDeployStateChecks={True|False}

True

指定您是否要讓部署指令碼包含會在部署資料庫結構描述前之前驗證目標資料庫狀態的陳述式。

/p:GenerateDropsIfNotInProject={True|False}

False

指定當您將更新部署到資料庫時,是否要將目標資料庫中不存在於來源專案中的物件卸除。

/p:IgnoreAnsiNulls={True|False}

False

指定將更新部署到資料庫時應該忽略或更新 ANSI Nulls 設定的差異。

/p:IgnoreAuthorizer={True|False}

False

指定將更新部署到資料庫時應該忽略或更新 Authorizer 的差異。

/p:IgnoreColumnCollation={True|False}

False

指定將更新部署到資料庫時應該忽略或更新資料行定序的差異。

/p:IgnoreComments={True|False}

False

指定將更新部署到資料庫時應該忽略或更新註解的差異。

/p:IgnoreCryptographicProviderFilePath={True|False}

False

指定將更新部署到資料庫時應該忽略或更新密碼編譯提供者的檔案路徑差異。

/p:IgnoreDdlTriggerState={True|False}

False

指定將更新部署到資料庫時應該忽略或更新資料定義語言 (DDL) 觸發程序的啟用或停用狀態差異。

/p:IgnoreDefaultSchema={True|False}

False

指定將更新部署到資料庫時應該忽略或更新預設結構描述的差異。

/p:IgnoreDmlTriggerOrder={True|False}

False

指定將更新部署到資料庫時應該忽略或更新資料操作語言 (DML) 觸發程序的順序差異。

/p:IgnoreDmlTriggerState={True|False}

False

指定將更新部署到資料庫時應該忽略或更新 DML 觸發程序的啟用或停用狀態差異。

/p:IgnoreExtendedProperties={True|False}

False

指定將更新部署到資料庫時應該忽略或更新擴充屬性的差異。

/p:IgnoreFilegroupPlacement={True|False}

True

指定將更新部署到資料庫時應該忽略或更新檔案群組中的物件位置差異。

/p:IgnoreFillFactor={True|False}

True

指定將更新部署到資料庫時應該忽略索引儲存區的填滿因數差異或是發出警告。

/p:IgnoreIdentitySeed={True|False}

False

指定將更新部署到資料庫時應該忽略或更新識別資料行的種子差異。

/p:IgnoreIncrement={True|False}

False

指定將更新部署到資料庫時應該忽略或更新識別資料行的增量差異。

/p:IgnoreIndexOptions={True|False}

False

指定將更新部署到資料庫時應該忽略或更新索引選項的差異。

/p:IgnoreIndexPadding={True|False}

True

指定將更新部署到資料庫時應該忽略或更新索引填補的差異。

/p:IgnoreKeywordCasing={True|False}

True

指定將更新部署到資料庫時應該忽略或更新關鍵字的大小寫差異。

/p:IgnoreLockHintsOnIndexes={True|False}

False

指定將更新部署到資料庫時應該忽略或更新索引的鎖定提示差異。

/p:IgnoreLoginSids={True|False}

False

指定將更新部署到資料庫時應該忽略或更新安全性識別碼 (SID) 的差異。

/p:IgnoreObjectPlacementOnPartitionSchema={True|False}

True

指定將更新部署到資料庫時應該忽略或更新資料分割資料表或索引的分割與檔案群組之對應的差異。

/p:IgnorePermissions={True|False}

False

指定將更新部署到資料庫時應該忽略或更新使用權限的差異。

/p:IgnoreQuotedIdentifiers={True|False}

False

指定將變更部署到資料庫時應該忽略或更新引號識別項設定的差異。

/p:IgnoreRoleMembership={True|False}

False

指定將更新部署到資料庫時應該忽略或更新登入的角色成員資格差異。

/p:IgnoreRouteLifetime={True|False}

True

指定將更新部署到資料庫時應該忽略或更新 SQL Server 在路由表中保留路由的時間量差異。

/p:IgnoreSemicolonBetweenStatements={True|False}

True

指定將更新部署到資料庫時將要忽略或更新介於 Transact-SQL 陳述式之間的分號差異。

/p:IgnoreStatisticsSample={True|False}

True

指定將更新部署到資料庫時將要忽略或更新用於 CREATE STATISTICS 的範例差異。

/p:IgnoreTableOptions={True|False}

False

指定將更新部署到資料庫時將要忽略或更新資料表選項的差異。

/p:IgnoreUserSettingsObjects={True|False}

False

指定將更新部署到資料庫時將要忽略或更新使用者設定物件的差異。

/p:IgnoreWhitespace={True|False}

True

指定將更新部署到資料庫時將要忽略或更新空白字元的差異。

/p:IgnoreWithNocheckOnCheckConstraints={True|False}

False

指定將更新部署到資料庫時將要忽略或更新檢查條件約束的 WITH NOCHECK 子句值差異。

/p:IgnoreWithNocheckOnForeignKeys={True|False}

False

指定將更新部署到資料庫時將要忽略或更新外部索引鍵的 WITH NOCHECK 子句值差異。

/p:IncludeTransactionalScripts={True|False}

False

指定在部署到資料庫時是否應該盡可能使用交易陳述式。

/p:NumericRoundAbort={True|False}

在來源模型中預設為此設定的值

指定 NUMERIC_ROUNDABORT 連線設定。 此設定會覆寫模型中的值。

/p:PerformDatabaseBackup={True|False}

False

指定進行任何變更之前是否應備份目標資料庫。

/p:QuotedIdentifier={True|False}

在來源模型中預設為此設定的值

指定 QUOTED_IDENTIFIER 連線設定。 此設定會覆寫模型中的值。

/p:SingleUserMode={True|False}

False

指定資料庫在更新期間是否應該放在單一使用者模式中。

/p:SqlCommandVariablesFile=FileName

在 .deploymanifest 檔中指定的 .sqlcmdvars 檔案。

指定當部署時您想要使用 .sqlcmdvars 檔案。

/p:TargetDatabase="String"

無法使用

指定您想要部署的資料庫名稱。

/p:TreatVerificationErrorsAsWarnings={True|False}

False

指定在部署驗證期間遇到的錯誤是否應該視為警告。 在對目標資料庫執行所產生的部署計劃之前,會對該計劃執行檢查。 計劃驗證作業會偵測必須卸除才能進行變更的問題,例如遺失僅限於目標的物件 (如索引)。 驗證作業也會偵測因為參考複合專案而存在相依性 (如資料表或檢視表) 的情況,但此種相依性不存在於目標資料庫中。 您可以選擇執行此作業,以取得所有部署問題的完整清單,而不是在遇到第一個錯誤時便停止部署。

/p:UnmodifiableObjectWarnings={True|False}

True

指定在無法修改的物件中發現差異時 (例如,檔案的大小或路徑不同) 是否應該產生警告。

/p:VerifyDeployment={True|False}

True

指定是否應該在部署之前執行檢查,該檢查若發現可能阻撓成功部署的問題時,便會停止部署。 例如,目標資料庫上若有不存在於資料庫專案中的外部索引鍵,將會在部署時造成錯誤,而您的部署作業可能會停止。

您可以在命令提示字元中輸入下列命令來顯示部署屬性的完整清單:

VSDBCMD /? /a:Deploy /dsp:sql /cs:" ConnectionString "

常見的匯入屬性

只有在您將物件與設定匯入至 .dbschema 檔時,才會套用下表中的屬性。

選項

預設

備註

/p:IgnoreExtendedProperties={True|False}

False

指定擴充的屬性應該忽略或匯入。

/p:IgnorePermissions={True|False}

False

指定權限應該忽略或匯入。

注意事項注意事項
此設定的預設值不同於當您使用 [匯入結構描述精靈] 匯入的預設值。

您可以在命令提示字元中輸入下列命令來顯示匯入屬性的完整清單:

VSDBCMD /? /a:Import /dsp:sql /cs:" ConnectionString "

部署到多個環境的命令列範例

您可以使用 VSDBCMD 將 .dbschema 檔案部署到多個目標環境。 在這個範例中,您會將 EnterpriseDB.dbschema 部署到開發、測試,和實際執行環境。

開發環境

"%programfiles%\Microsoft Visual Studio 10.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/manifest:EnterpriseDB.deploymanifest 
/p:DeploymentConfigurationFile=Development.sqldeployment 
/p:SqlCommandVariablesFile=Development.sqlcmdvars 
/cs:"Data Source=DEV\sql2008;Integrated Security=true"

測試環境

"%programfiles%\Microsoft Visual Studio 10.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/manifest:EnterpriseDB.deploymanifest 
/p:DeploymentConfigurationFile=UserTest.sqldeployment 
/p:SqlCommandVariablesFile=UserTest.sqlcmdvars 
/cs:"Data Source=USERTEST\sql2008;Integrated Security=true"

實際執行環境

"%programfiles%\Microsoft Visual Studio 10.0\vstsdb\deploy\vsdbcmd" 
/a:Deploy 
/manifest:EnterpriseDB.deploymanifest 
/p:DeploymentConfigurationFile=Production.sqldeployment 
/p:SqlCommandVariablesFile=Production.sqlcmdvars 
/cs:"Data Source=PRODUCTION\sql2008;Integrated Security=true"

針對每個環境,提供目標環境特定的部署組態、SQLCMD 變數檔案和連線字串。

所有環境都共用部署資訊清單。 部署資訊清單包含您想要部署的 .dbschema 檔案名稱。

請參閱

工作

HOW TO:使用 VSDBCMD.EXE 從命令提示字元準備資料庫進行部署

概念

建置和部署資料庫到開發用或實際執行環境

資料庫專案設定概觀

變更記錄

日期

記錄

原因

2010 年 7 月

新增連接字串的範例。 新增 /targetmodelfile 的描述。

客戶回函。

2011 年 4 月

已更正 BlockIncrementalDeploymentIfDataLoss 的名稱,並加入有關建立累加部署指令碼的備註。

客戶回函。