SqlPackage

SqlPackage 這個命令列公用程式會公開部分公用 Data-Tier Application Framework (DacFx) API,讓下列資料庫開發工作自動化:

  • 版本:傳回 SqlPackage 應用程式的組建編號。

  • 解壓縮:建立資料層應用程式 (.dacpac) 檔案,其中包含已連接 SQL 資料庫的架構或架構和使用者資料。

  • Publish:以累加方式更新資料庫結構描述,以符合來源 .dacpac 檔案的結構描述。 如果資料庫不存在伺服器上,發行作業會加以建立。 否則,將更新現有的資料庫。

  • 匯出:將連接的 SQL 資料庫 (包括資料庫架構和使用者資料) 匯出至 BACPAC 檔案 (bacpac)。

  • 匯入將 BACPAC 檔案的結構和資料表資料匯入至新的使用者資料庫。

  • DeployReport:建立 XML 報告,表示發佈動作將進行的變更。

  • DriftReport:建立 XML 報告,表示自上次註冊以來套用於已註冊資料庫的變更。

  • Script:建立 Transact-SQL 累加更新指令碼,這個指令碼會更新目標的結構描述以符合來源的結構描述。

SqlPackage 命令列工具可讓您指定這些動作以及動作特有的參數和屬性。

下載最新版本 。 如需最新版本的詳細資訊,請參閱版本資訊

注意

雖然 Microsoft Entra ID 是 Azure Active Directory (Azure AD) 的新名稱,但為了防止干擾現有的環境,Azure AD 仍會保留在某些硬式編碼元素中,如 UI 欄位、連線供應商、錯誤碼與 Cmdlet。 在本文章中,這兩個名稱是可互換的。

命令列語法

SqlPackage 會使用命令列上指定的參數屬性和 SQLCMD 變數來起始指定的動作。

SqlPackage {parameters} {properties} {SQLCMD variables}

結束代碼

SqlPackage 命令傳回下列結束代碼:

  • 0 = 成功
  • 非零 = 失敗

使用範例

個別動作頁面上提供進一步的範例。

建立目前資料庫結構描述的 .dacpac 檔案:

SqlPackage /TargetFile:"C:\sqlpackageoutput\output_current_version.dacpac" /Action:Extract /SourceServerName:"." /SourceDatabaseName:"Contoso.Database"

參數

某些參數會在 SqlPackage 動作之間共用。 以下是摘要參數的資料表,如需詳細資訊,請按一下特定動作頁面。

參數 簡短形式 擷取 Publish 匯出 匯入 DeployReport DriftReport 指令碼
/AccessToken: /at x x x x x x x
/ClientId: /cid x
/DeployScriptPath: /dsp x x
/DeployReportPath: /drp x x
/Diagnostics: /d x x x x x x x
/DiagnosticsFile: /df x x x x x x x
/MaxParallelism: /mp x x x x x x x
/OutputPath: /op x x x
/OverwriteFiles: /of x x x x x x
/Profile: /pr x x x
/Properties: /p x x x x x x
/Quiet: /q x x x x x x x
/Secret: /secr x
/SourceConnectionString: /scs x x x x x
/SourceDatabaseName: /sdn x x x x x
/SourceEncryptConnection: /sec x x x x x
/SourceFile: /sf x x x x
/SourcePassword: /sp x x x x x
/SourceServerName: /ssn x x x x x
/SourceTimeout: /st x x x x x
/SourceTrustServerCertificate: /stsc x x x x x
/SourceUser: /su x x x x x
/TargetConnectionString: /tcs x x x x
/TargetDatabaseName: /tdn x x x x x
/TargetEncryptConnection: /tec x x x x x
/TargetFile: /tf x x x x
/TargetPassword: /tp x x x x x
/TargetServerName: /tsn x x x x x
/TargetTimeout: /tt x x x x x
/TargetTrustServerCertificate: /ttsc x x x x x
/TargetUser: /tu x x x x x
/TenantId: /tid x x x x x x x
/UniversalAuthentication: /ua x x x x x x x
/Variables: /v x x

屬性

SqlPackage 動作支援大量屬性,以修改動作的預設行為。 如需詳細資訊,請按一下特定動作頁面。

公用程式命令

版本

將 sqlpackage 版本顯示為組建編號。 可用於互動式提示和自動化管線

SqlPackage /Version

說明

您可以使用 /?/help:True 來顯示 SqlPackage 使用方式資訊。

SqlPackage /?

對於特定動作特定的參數和屬性資訊,除了該動作的參數之外,請使用 help 參數。

SqlPackage /Action:Publish /?

驗證

SqlPackage 會使用 SqlClient 中可用的方法來驗證。 設定驗證類型可以透過每個 SqlPackage 動作 (/SourceConnectionString/TargetConnectionString) 的連接字串參數來完成,或透過連線屬性的個別參數來完成。 連接字串中支援下列驗證方法:

  • SQL Server 驗證
  • Active Directory (Windows) 驗證
  • Microsoft Entra 驗證
    • 使用者名稱/密碼
    • 整合式驗證
    • 通用驗證
    • 受控識別
    • 服務主體

受控識別

注意

Microsoft Entra 標識符 先前稱為 Azure Active Directory (Azure AD)。

在自動化環境中,Microsoft Entra 受控識別是建議的驗證方法。 此方法不需要在執行階段將認證傳遞至 SqlPackage。 在為執行 SqlPackage 動作的環境設定受控識別時,SqlPackage 動作可以使用該身分識別向 Azure SQL 進行驗證。 如需有關為環境設定受控識別的詳細資訊,請參閱受控識別文件

使用系統指派受控識別的連接字串範例為:

Server=sampleserver.database.windows.net; Authentication=Active Directory Managed Identity; Database=sampledatabase;

環境變數

連線共用

您可以將 CONNECTION_POOLING_ENABLED 環境變數設定為 True,以針對 SqlPackage 建立的所有連線啟用連線共用。 建議使用 Microsoft Entra 使用者名稱和密碼連線進行操作時使用此設定,以避免受到 Microsoft 驗證程式庫 (MSAL) 限制。

暫存檔案

在 SqlPackage 作業期間,資料表資料會在壓縮之前或解壓縮之後寫入暫存檔。 對於大型資料庫,這些暫存檔案可能會佔用大量的磁碟空間,但可以指定其位置。 匯出和擷取作業包含選擇性屬性,以指定 /p:TempDirectoryForTableData 覆寫 SqlPackage 的預設值。

.NET API GetTempPath 可用於判斷 SqlPackage 內的預設值。

針對 Windows,會依下列順序檢查下列環境變數,並使用存在的第一個路徑:

  1. TMP 環境變數指定的路徑。
  2. TEMP 環境變數指定的路徑。
  3. USERPROFILE 環境變數指定的路徑。
  4. Windows 目錄。

針對 Linux 和 macOS,如果未在 TMPDIR 環境變數中指定路徑,則會使用預設路徑 /tmp/

SqlPackage 和資料庫使用者

自主資料庫使用者包含在 SqlPackage 作業中。 不過,定義的密碼部分會設定為 SqlPackage 隨機產生的字串,而不會傳輸現有的值。 建議在匯入 .bacpac 或部署 .dacpac 之後,將新使用者的密碼重設為安全值。 在自動化環境中,可以在 SqlPackage 後續的步驟中,從安全金鑰存放區 (例如 Azure Key Vault) 擷取密碼值。

使用量資料收集

SqlPackage 包含啟用網際網路的功能,可收集匿名的功能使用情況和診斷資料,並傳送給 Microsoft。

SqlPackage 可能會收集標準電腦、使用情況與效能資訊,這些資訊可能會傳輸至 Microsoft 並加以分析,以改善 SqlPackage 的品質、安全性與可靠性。

SqlPackage 不會收集使用者特定的或個人資訊。 為了協助估計單一使用者進行診斷,SqlPackage 會為其執行的每部電腦產生一個隨機 GUID,並將該值用於其傳送的所有事件。

如需詳細資訊,請參閱 Microsoft 隱私權聲明SQL Server 隱私權補充

停用遙測報告

若要停用遙測收集和報告,請將環境變數 DACFX_TELEMETRY_OPTOUT 更新為 true1

支援

DacFx 程式庫和 SqlPackage CLI 工具已採用 Microsoft 新式生命週期原則。 只有在主要版本的最新點版本中,才會發行所有安全性更新、修正程式和新功能。 將 DacFx 或 SqlPackage 安裝維持在目前版本,有助於確保您能及時收到所有適用的錯誤修正。

DacFx GitHub 存放庫中取得 SqlPackage 的說明,提交功能要求,以及報告問題。

支援的 SQL 供應項目

SqlPackage 和 DacFx 支援 SqlPackage/DacFx 發行時所有支援的 SQL 版本。 例如,2022 年 1 月 14 日的 SqlPackage 版本支援 2022 年 1 月 14 日所有支援的 SQL 版本。 如需 SQL 支援原則的詳細資訊,請參閱 SQL 支援原則

後續步驟