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

如何在Azure SQL创建外部表访问同子网本地SQL Server?遇连接错误

问题排查与解决方案

1. 强制使用TCP/IP协议并指定端口

错误提示指向Named Pipes连接失败,而你需要使用TCP/IP,需在外部数据源的LOCATION中显式指定端口(非命名SQL实例默认端口为1433),强制Azure SQL使用TCP/IP协议连接:

-- 若需更新,先删除原有外部数据源
DROP EXTERNAL DATA SOURCE [SignalRxDataSource];

-- 创建带端口的外部数据源
CREATE EXTERNAL DATA SOURCE [SignalRxDataSource]    
WITH (
    TYPE = RDBMS,  
    LOCATION = 'sqlserver://10.0.0.6:1433',  -- 自定义端口请替换为实际值
    DATABASE_NAME = 'staging',  
    CREDENTIAL = [SignalRxCredential]
);

2. 确认Azure SQL与本地SQL Server的网络连通性

注意:你用SSMS从本地机器连接两者,不代表Azure SQL服务端能直接访问本地SQL Server。需确保:

  • 本地SQL Server所在子网与Azure SQL的VNet已通过VNet对等连接或VPN网关打通。
  • 本地SQL Server的Windows防火墙/硬件防火墙已开放对应端口(1433或自定义端口),允许Azure SQL所在VNet的IP范围访问。
  • 网络安全组(NSG)规则允许Azure SQL的出站流量访问本地SQL Server的目标端口。

3. 检查本地SQL Server的TCP/IP配置

确保TCP/IP协议正确启用并绑定端口:

  • 打开SQL Server配置管理器,进入SQL Server网络配置 -> MSSQLSERVER的协议(非命名实例),确认TCP/IP状态为启用。
  • 双击TCP/IP,切换到IP地址标签页:
    • 找到IPAll节点,设置TCP端口为1433(或你的自定义端口)。
    • 确保所有需要的IP地址的已启用选项设为是。
  • 重启SQL Server服务使配置生效。

4. 验证凭据的权限

确认你使用的SQL登录账号:

  • 在本地SQL Server的staging数据库中拥有INSERT权限(满足写入触发邮件触发器的需求)。
  • 能正常登录本地SQL Server,且未被IP限制或登录策略阻挡。

5. 确认Azure SQL版本的连接限制

如果你的Azure SQL是单数据库/弹性池(非托管实例),直接通过RDBMS类型外部数据源连接本地SQL Server是不支持的,必须使用On-Premises Data Gateway中转:

  1. 在本地部署并注册On-Premises Data Gateway到你的Azure订阅。
  2. 修改外部数据源创建语句,添加网关配置:
CREATE EXTERNAL DATA SOURCE [SignalRxDataSource]
WITH (
    TYPE = RDBMS,
    LOCATION = '10.0.0.6,1433',
    DATABASE_NAME = 'staging',
    CREDENTIAL = [SignalRxCredential],
    CONNECTION_OPTIONS = 'GatewaySettings={"DataGatewayResourceId":"/subscriptions/你的订阅ID/resourceGroups/资源组名/providers/Microsoft.DataFactory/gateways/网关名称"}'
);

只有Azure SQL托管实例(部署在VNet内)才能直接访问同子网的本地SQL Server,普通Azure SQL DB必须依赖数据网关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:40:17