Azure Synapse专用SQL池执行SQL脚本时出现语法错误
Azure Synapse专用池创建RLS_LOGS表报错的解决方法
你的SQL脚本存在两个关键问题,导致在Synapse专用池中执行失败:
- 错误使用了CTAS(CREATE TABLE AS SELECT)语法:CTAS要求
AS后面必须跟有效的SELECT查询语句,而非直接定义列结构 - Synapse专用池的CTAS不支持在列定义中直接指定DEFAULT约束
修正方案一:使用常规CREATE TABLE语法(推荐,适合创建空表)
直接用标准建表语句定义结构和约束,不需要依赖CTAS:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[RLS_LOGS] ( [USER_IDENTITY] [nvarchar](4000) NOT NULL, [DESCRIPTION] [nvarchar](4000) NOT NULL, [CREATED_ON] [datetime2](7) NOT NULL DEFAULT (GETDATE()) ) WITH ( DISTRIBUTION = ROUND_ROBIN, CLUSTERED COLUMNSTORE INDEX );
修正方案二:先通过CTAS创建表,再添加DEFAULT约束
如果必须用CTAS(比如基于现有数据创建表),可以分两步操作:
- 用CTAS创建空表或带初始数据的表:
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[RLS_LOGS] WITH ( DISTRIBUTION = ROUND_ROBIN, CLUSTERED COLUMNSTORE INDEX ) AS -- 生成空表,若有数据源可替换为实际查询 SELECT CAST('' AS nvarchar(4000)) AS [USER_IDENTITY], CAST('' AS nvarchar(4000)) AS [DESCRIPTION], CAST(GETDATE() AS datetime2(7)) AS [CREATED_ON] WHERE 1 = 0;
- 为CREATED_ON列添加DEFAULT约束:
ALTER TABLE [dbo].[RLS_LOGS] ADD DEFAULT (GETDATE()) FOR [CREATED_ON];
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

