使用Invoke-Sqlcmd在Synapse SQL池建表时遇连接/登录错误求助
解决Invoke-Sqlcmd连接Azure Synapse专用SQL池的问题
一、先修正命令拼写错误
你的命令里-SeverInstance是拼写错误,正确参数是-ServerInstance,这个低级错误会直接导致连接失败,先改过来。
二、正确指定ServerInstance值
不同端点的格式要求不一样,针对专用SQL池,你必须用对应的专用端点:
- 专用SQL端点格式:
<工作区名称>-sql.sql.azuresynapse.net,别直接用Synapse工作区资源名称,也不要混用无服务器端点。
三、解决专用端点的“无法登录用户名”问题
- 确认用户名是专用SQL池的管理员账号,或者是在该专用池中授权过的数据库用户,Synapse工作区管理员不一定自动拥有专用池的登录权限。
- 检查专用SQL池的防火墙规则:在Azure门户里开启“允许Azure服务和资源访问此服务器”(你在Azure门户的PowerShell CLI执行,这个规则必须开),如果后续用本地环境测试,还要添加对应IP。
- 核对密码:专用SQL池的管理员密码是创建池时单独设置的,和Synapse工作区密码可能不一样,别搞混。
四、错误代码25、35的排查方案
- 错误25:TCP连接失败,先在PowerShell里跑
Test-NetConnection -ComputerName <你的专用端点> -Port 1433,确认网络能连通。 - 错误35:SSL/TLS版本不兼容,Synapse要求TLS 1.2以上,执行命令前先设置:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
五、修正后的完整命令示例
# 强制使用TLS 1.2 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # 执行建表命令 Invoke-Sqlcmd -Query 'CREATE TABLE #DUMMYTABLE(USERNAME varchar(50));' ` -ServerInstance "your-workspace-sql.sql.azuresynapse.net" ` -Database "your-dedicated-sql-pool-name" ` -Username "your-dedicated-pool-admin" ` -Password "your-password" ` -QueryTimeout 36000 ` -Verbose
六、ADO流水线迁移提示
- 优先用ADO的「Azure SQL Database」任务,它支持Synapse专用SQL池,能直接用服务连接管理凭据,不用硬编码密码。
- 如果非要用PowerShell任务:用微软托管代理的话,确保专用池防火墙允许Azure服务访问;用自托管代理的话,要把代理IP加入防火墙白名单。
内容的提问来源于stack exchange,提问作者Maabat
相关产品推荐
相关产品推荐

