如何在Azure DevOps中运行Azure Synapse Analytics工作区的SQL脚本?
解决方案:运行Azure Synapse工作区中的SQL脚本(无服务器SQL池)
方法1:使用Azure PowerShell
你已通过Get-AzSynapseSqlScript获取脚本列表,每个脚本对象包含Content属性(存储SQL脚本内容),可通过Invoke-AzSynapseSqlCommand直接执行脚本内容,指定无服务器SQL池(默认名称为builtin):
# 遍历获取到的SQL脚本列表 foreach ($script in $scripts) { Write-Host "正在执行脚本: $($script.Name)" # 执行脚本内容,指定无服务器SQL池 Invoke-AzSynapseSqlCommand -WorkspaceName $workspaceName ` -SqlPoolName "builtin" ` -Query $script.Content }
若需处理执行结果,可将输出保存至变量:
$executionResult = Invoke-AzSynapseSqlCommand -WorkspaceName $workspaceName ` -SqlPoolName "builtin" ` -Query $script.Content
方法2:使用Azure CLI
你之前尝试的az synapse sql-script invoke需补充无服务器SQL池参数,批量执行脚本列表时需先提取脚本内容再执行:
单个已保存脚本执行
调用工作区中已保存的SQL脚本,需指定--sql-pool-name参数指向无服务器池:
az synapse sql-script invoke --resource-group $resourceGroupName \ --workspace-name $workspaceName \ --name $scriptName \ --sql-pool-name "builtin" \ --output table
批量执行脚本列表
先获取所有脚本名称,再逐个提取内容并执行:
# 获取所有SQL脚本名称 script_names=$(az synapse sql-script list --workspace-name $workspaceName --query "[].name" -o tsv) # 遍历执行每个脚本 for script_name in $script_names; do echo "正在执行脚本: $script_name" # 提取脚本内容 script_content=$(az synapse sql-script show --workspace-name $workspaceName --name $script_name --query "content" -o tsv) # 执行脚本 az synapse sql query execute --workspace-name $workspaceName \ --sql-pool-name "builtin" \ --query "$script_content" \ --output table done
注意事项
- 权限补充:你的SPN除订阅/资源组的参与者权限外,还需拥有Synapse工作区的
Synapse SQL Contributor角色,或针对无服务器SQL池的SQL执行权限,否则会触发权限不足错误。 - 池名称验证:默认无服务器SQL池名称为
builtin,若你的环境使用自定义名称,请替换为对应值。
内容的提问来源于stack exchange,提问作者Himanshu Prakash
相关产品推荐
相关产品推荐

