You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决PowerShell中sqlpackage导出Azure SQL至存储账户的扩展名错误

解决sqlpackage导出Azure SQL到Blob存储时的TargetFile扩展名错误

你遇到的问题是因为/TargetFile参数仅适用于本地文件路径,而要导出到Azure Blob存储的远程URL,需要使用sqlpackage专门提供的/TargetUri参数。以下是修正后的完整代码和关键说明:

修正后的PowerShell代码

# 生成容器SAS令牌,输出格式为TSV
$sasToken = az storage container generate-sas `
    --account-name <storage_account> `
    --name <container> `
    --permissions rwl `
    --expiry 2025-06-01T00:00:00Z `
    --output tsv

# 构建完整的Blob目标URI,处理SAS令牌的?符号
$baseBlobUrl = "https://<storage_account>.blob.core.windows.net/<container>/<file_name>.bacpac"
$targetUri = $baseBlobUrl + $(if ($sasToken -notmatch '^\?') { '?' } else { '' }) + $sasToken

# 使用/TargetUri参数执行导出
& "sqlpackage.exe" `
    /Action:Export `
    /SourceConnectionString:$env:ConnStr `
    /TargetUri:$targetUri

关键修复点

  • 替换参数类型:用/TargetUri替代/TargetFile。sqlpackage对本地文件和远程Blob存储路径做了区分,/TargetUri用于识别包括Azure Blob在内的远程存储URL,而/TargetFile仅解析本地文件系统路径,这是导致原错误的核心原因。
  • 规范SAS拼接:自动判断SAS令牌是否带有开头的?,避免出现??这类无效拼接,确保URL格式符合Blob存储的访问规范。
  • 明确扩展名位置:确保.bacpac后缀直接跟在文件名后、SAS令牌前,让sqlpackage能正确识别导出文件的类型。

额外注意事项

  • 确认使用的sqlpackage版本支持Azure Blob存储导出(建议安装最新稳定版)。
  • 验证生成的SAS令牌权限包含w(写入)、r(读取)、l(列表),否则会出现导出权限不足的错误。

内容的提问来源于stack exchange,提问作者Sandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:08:30