SqlPackage 导入参数和属性

SqlPackage 导入操作将架构和表数据从 BACPAC 文件 (.bacpac) 导入 SQL Server 或 Azure SQL 数据库中的新数据库或空白数据库。 对现有数据库执行导入操作时,目标数据库无法包含任何用户定义的架构对象。 如果经过身份验证的用户具有创建数据库权限,也可通过导入操作创建新数据库。 导入操作是 SqlPackage 的数据库可移植性功能的一部分。

注意

虽然 Microsoft Entra ID 是 Azure Active Directory (Azure AD) 的新名称,但为了防止中断现有环境,Azure AD 仍保留在一些硬编码的元素中,例如 UI 字段、连接提供程序、错误代码和 cmdlet。 在本文中,这两个名称可以互换。

注意

对于低于 200GB 的数据库,SqlPackage 导入性能最佳。 对于较大的数据库,建议使用本文中提供的属性和 SqlPackage 故障排除中的提示来优化操作,或者通过 Parquet 文件中的数据实现数据库可移植性。

命令行语法

SqlPackage 使用在命令行上指定的参数、属性和 SQLCMD 变量启动指定的操作。

SqlPackage /Action:Import {parameters} {properties}

必需的参数

导入操作需要一个 SourceFile 参数来指定包含数据库对象和数据的 .bacpac 文件的名称和位置。

导出操作需要一个目标连接,其中 SqlPackage 将创建一个新数据库,或者存在一个空白数据库。 这可以通过以下方法的组合指定:

  • TargetServerNameTargetDatabaseName 参数,或者
  • TargetConnectionString 参数。

示例

# example import to Azure SQL Database using SQL authentication and a connection string
SqlPackage /Action:Import /SourceFile:"C:\AdventureWorksLT.bacpac" \
    /TargetConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;Persist Security Info=False;User ID=sqladmin;Password={your_password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"

# example import using short form parameter names
SqlPackage /a:Import /tsn:"{yourserver}.database.windows.net,1433" /tdn:"AdventureWorksLT" /tu:"sqladmin" \
    /tp:"{your_password}" /sf:"C:\AdventureWorksLT.bacpac"

# example import using Microsoft Entra managed identity
SqlPackage /Action:Import /SourceFile:"C:\AdventureWorksLT.bacpac" \
    /TargetConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;Authentication=Active Directory Managed Identity;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"

# example import connecting using Microsoft Entra username and password
SqlPackage /Action:Import /SourceFile:"C:\AdventureWorksLT.bacpac" \
    /TargetConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;Authentication=Active Directory Password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;User ID={yourusername};Password={yourpassword}"

# example import connecting using Microsoft Entra universal authentication
SqlPackage /Action:Import /SourceFile:"C:\AdventureWorksLT.bacpac" /UniversalAuthentication:True \
    /TargetConnectionString:"Server=tcp:{yourserver}.database.windows.net,1433;Initial Catalog=AdventureWorksLT;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"

导入操作的参数

参数 缩写 说明
/AccessToken: /at: {string} 指定要在连接到目标数据库时使用的基于令牌的身份验证访问令牌。
/Action: /a: 导入 指定要执行的操作。
/AzureCloudConfig: /acc: {string} 指定用于连接到 Microsoft Entra ID 的自定义终结点,格式为:AzureActiveDirectoryAuthority={value};DatabaseServicePrincipalName={value}"。
/Diagnostics: /d: {True|False} 指定诊断日志记录是否输出到控制台。 默认为 False。
/DiagnosticsFile: /df: {string} 指定一个用于存储诊断日志的文件。
/MaxParallelism: /mp: {int} 指定针对数据库运行的并发操作的并行度。 默认值为 8。
/ModelFilePath: /mfp: {string} 指定在源文件中重写 model.xml 的文件路径。 使用此设置可能会导致部署失败和/或意外的数据丢失。 此设置仅供解决发布、导入或脚本生成问题时使用。
/Properties: /p: {PropertyName}={Value} 特定于操作的属性指定名称值对;{PropertyName}={Value}。
/Quiet: /q: {True|False} 指定是否隐藏详细反馈。 默认为 False。
/SourceFile: /sf: {string} 指定要用作本地存储的操作源的源文件。 如果使用此参数,则其他源参数应无效。
/TargetConnectionString: /tcs: {string} 指定目标数据库的有效 SQL Server/Azure 连接字符串。 如果指定了此参数,则应该独立于所有其他目标参数来使用此参数。
/TargetDatabaseName: /tdn: {string} 指定作为 SqlPackage 操作目标的数据库的名称替代。
/TargetEncryptConnection: /tec: {Optional|Mandatory|Strict|True|False} 指定是否应将 SQL 加密用于目标数据库连接。 默认值为 True。
/TargetHostNameInCertificate: /thnic: {string} 指定在使用 TLS 加密通信层时用于验证目标 SQL Server TLS/SSL 证书的值。
/TargetPassword: /tp: {string} 对于 SQL Server 身份验证方案,定义要用于访问目标数据库的密码。
/TargetServerName: /tsn: {string} 定义承载目标数据库的服务器的名称。
/TargetTimeout: /tt: {int} 指定建立与目标数据库的连接的超时时间(以秒为单位)。 对于 Microsoft Entra ID,建议此值大于或等于 30 秒。
/TargetTrustServerCertificate: /ttsc: {True|False} 指定是否使用 TLS 对目标数据库连接进行加密,并绕过证书链来验证信任。 默认值为 False。
/TargetUser: /tu: {string} 对于 SQL Server 身份验证方案,定义要用于访问目标数据库的 SQL Server 用户。
/TenantId: /tid: {string} 表示 Microsoft Entra 租户 ID 或域名。 此选项是支持来宾用户或已导入的 Microsoft Entra 用户以及 outlook.com、hotmail.com 或 live.com 等 Microsoft 帐户的必需选项。 如果省略此参数,将使用 Microsoft Entra ID 的默认租户 ID(假定经过身份验证的用户是此 AD 的本机用户)。 但是,在这种情况下,不支持在此 Microsoft Entra ID 中托管的任何来宾或已导入的用户和/或 Microsoft 帐户,并且操作将失败。
有关详细信息,请参阅 SQL 数据库和 Azure Synapse Analytics 的通用身份验证(SSMS 对 MFA 的支持)
/ThreadMaxStackSize: /tmss: {int} 指定运行 SqlPackage 操作的线程的最大大小(以 MB 为单位)。 仅当遇到分析非常大的 Transact-SQL 语句时出现的堆栈溢出异常时,才应使用此选项。
/UniversalAuthentication: /ua: {True|False} 指定是否应使用通用身份验证。 如果设置为 True,则激活交互式身份验证协议以支持 MFA。 此选项还可用于在不使用 MFA 时进行 Microsoft Entra 身份验证,方法是使用需要用户输入用户名和密码或集成身份验证(Windows 凭据)的交互式协议。 如果将 /UniversalAuthentication 设置为 True,则无法在 SourceConnectionString (/scs) 中指定 Microsoft Entra 身份验证。 如果将 /UniversalAuthentication 设置为 False,则必须在 SourceConnectionString (/scs) 中指定 Microsoft Entra 身份验证。
有关详细信息,请参阅 SQL 数据库和 Azure Synapse Analytics 的通用身份验证(SSMS 对 MFA 的支持)

特定于导入操作的属性

属性 价值 说明
/p: CommandTimeout=(INT32 '60') 指定针对 SQL Server 执行查询时的命令超时(以秒为单位)。
/p: DatabaseEdition=({ Basic | Standard | Premium | DataWarehouse | GeneralPurpose | BusinessCritical | Hyperscale | Default } 'Default') 定义 Azure SQL 数据库的版本。 请参阅 Azure SQL 数据库服务层级
/p: DatabaseLockTimeout=(INT32 '60') 指定针对 SQLServer 执行查询时的数据库锁超时(以秒为单位)。 使用 -1 表示无限期等待。
/p: DatabaseMaximumSize=(INT32 '0') 定义 Azure SQL 数据库的大小上限(以 GB 为单位)。
/p: DatabaseServiceObjective=(STRING) 定义 Azure SQL 数据库的性能级别,如“P0”或“S1”。
/p: DisableIndexesForDataPhase=(BOOLEAN 'True') 为 true(默认值)时,则先禁用索引,然后再导入数据。 为 false 时,索引不会重新生成。
/p: DisableParallelismForEnablingIndexes=(BOOLEAN 'False') 将数据导入 SQL Server 时,在重新生成索引时不使用平行度。
/p: HashObjectNamesInLogs=(BOOLEAN 'False') 指定是否用随机哈希值替换日志中的所有对象名称。
/p: ImportContributorArguments=(STRING) 为部署参与者指定部署参与者参数。 此属性应该是用分号分隔的值列表。
/p: ImportContributorPaths=(STRING) 指定用于加载其他导入参与者的路径。 此属性应该是用分号分隔的值列表。
/p: ImportContributors=(STRING) 指定应在导入 dacpac 时运行的部署参与者。 此属性应该是以分号分隔的完全限定的生成参与者名称或 ID 列表。
/p: LongRunningCommandTimeout=(INT32 '0') 指定针对 SQL Server 执行查询时的长时间运行命令超时(以秒为单位)。 使用 0 表示无限期等待。
/p: PreserveIdentityLastValues=(BOOLEAN 'False') 指定在部署期间是否应保留标识列的最后值。
/p: RebuildIndexesOfflineForDataPhase=(BOOLEAN 'False') 为 true 时,在将数据导入 SQL Server 后脱机重新生成索引。
/p: Storage=({File|Memory}) 指定在生成数据库模型时如何存储元素。 出于性能原因,默认值为 InMemory。 对于大型数据库,需要备份了文件的存储。

后续步骤