Azure专用SQL池(SQLDW)中Serializable表提示异常行为咨询
关于Azure专用SQL池SERIALIZABLE表提示异常语法现象的解答
语法表现差异的成因
- Azure专用SQL池(原SQLDW)的T-SQL是适配分布式架构的SQL Server语法子集,本身就不支持
SERIALIZABLE作为表级提示,官方支持的表提示列表中无该选项。 - 写有
WITH关键字时,解析器会严格校验括号内的内容是否为合法的表/视图提示,校验不通过就会直接抛出你遇到的103022错误。 - 省略
WITH关键字时,专用SQL池的T-SQL解析器不会将括号内的内容识别为表提示,而是会将该括号内容判定为无意义的语法冗余直接忽略,不会触发提示合法性校验,因此语句可以正常执行。
省略WITH后语句的实际执行逻辑
你所写的不带WITH的查询语句,在实际执行时等价于无任何表提示的普通查询:
select * from serialtest order by session_id
括号内的serializable完全没有被解析为隔离级提示,语句会使用专用SQL池默认的读提交(READ COMMITTED)隔离级别运行,自然不会出现SERIALIZABLE隔离级别的锁止、禁止并发更新的效果,就算包裹在显式事务块中也不会改变这个执行逻辑。
内容的提问来源于stack exchange,提问作者Doua
相关产品推荐
相关产品推荐

