Azure Synapse SQL池跨库访问:从PoolB访问PoolA中Customers表
从Synapse SQL PoolB访问PoolA中Customers表的实现方案
核心结论
可以从PoolB访问PoolA中的Customers表,CREATE EXTERNAL DATA SOURCE方法是支持的,以下是具体配置步骤和语法:
前提条件
- 两个SQL池需处于同一Azure Synapse工作区(跨工作区需额外配置网络和权限,同一工作区操作更简便)
- 操作账号在PoolB中拥有
CONTROL权限,在PoolA中拥有目标表的SELECT权限
具体操作步骤
1. 在PoolB中创建数据库范围凭据
根据身份验证方式选择对应的创建语句:
-- SQL身份验证方式 CREATE DATABASE SCOPED CREDENTIAL PoolACredential WITH IDENTITY = '你的SQL账号', SECRET = '账号密码'; -- Azure AD托管标识方式 CREATE DATABASE SCOPED CREDENTIAL PoolACredential WITH IDENTITY = 'Managed Identity';
2. 创建指向PoolA的外部数据源
CREATE EXTERNAL DATA SOURCE PoolASource WITH ( LOCATION = 'sqlserver://<你的Synapse工作区名称>.sql.azuresynapse.net', DATABASE_NAME = 'PoolA', -- 替换为PoolA的实际数据库名 CREDENTIAL = PoolACredential );
3. 创建映射到Customers表的外部表
需保证列定义与PoolA中Customers表完全一致:
CREATE EXTERNAL TABLE dbo.Customers ( -- 以下列仅为示例,需替换为实际表的列结构 CustomerID INT, CustomerName VARCHAR(100), Email VARCHAR(200), RegisterDate DATE ) WITH ( LOCATION = 'dbo.Customers', -- PoolA中表的schema+表名 DATA_SOURCE = PoolASource );
4. 验证访问权限
创建完成后直接查询外部表即可:
SELECT * FROM dbo.Customers;
注意事项
- 外部表的列名、数据类型、顺序必须与PoolA中的源表完全匹配,否则会出现查询错误
- 使用Azure AD托管标识时,需确保该标识在PoolA中被授予Customers表的
SELECT权限 - 若工作区启用了专用终结点,需配置网络规则允许两个SQL池之间的通信
内容的提问来源于stack exchange,提问作者Rjuser
相关产品推荐
相关产品推荐

