Azure Synapse无服务器SQL池报错:DISTRIBUTION附近语法不正确
Azure Synapse无服务器SQL池语法错误分析与解决
错误根源
- 无服务器SQL池不支持
DISTRIBUTION配置:DISTRIBUTION = ROUND_ROBIN是**专用SQL池(原SQL数据仓库)**的特有语法,无服务器SQL池基于计算存储分离架构,不需要也不允许指定表分布策略,这是触发"Incorrect syntax near 'DISTRIBUTION'"的直接原因。 - 代码还存在其他语法问题:
- 创建外部表需使用
CREATE EXTERNAL TABLE,而非普通的CREATE TABLE CREATE TABLE语句中WITH块后不能直接跟AS SELECT,需调整为符合外部表创建逻辑的结构
- 创建外部表需使用
修正后的动态SQL示例
SELECT CM.EntityName, --Before the first column of each table, construct a DROP TABLE statement if already exist CASE WHEN CM.OrdinalPosition = 1 THEN 'DROP EXTERNAL TABLE IF EXISTS ' + QUOTENAME(@EnrichedViewSchema) + '.' + QUOTENAME(CM.EntityName) + ' CREATE EXTERNAL TABLE ' + QUOTENAME(@EnrichedViewSchema) + '.' + QUOTENAME(CM.EntityName) + ' WITH ( LOCATION = ''your-storage-path'', -- 必须指定外部存储路径 DATA_SOURCE = YourExternalDataSource, -- 已预先定义的外部数据源 FILE_FORMAT = YourFileFormat -- 已预先定义的文件格式 ) AS SELECT DISTINCT ' ELSE ' ,' END
关键注意事项
- 无服务器SQL池中的外部表必须指定
LOCATION、DATA_SOURCE、FILE_FORMAT三个必填参数 - 严格区分专用池与无服务器池的语法差异,不要混用两类池的表创建逻辑
- 动态SQL拼接对象名时,务必用
QUOTENAME()包裹所有标识符,避免语法错误与SQL注入风险
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

