如何在DBVisualizer中一次性执行包含多个临时表的单条查询
问题原因
你遇到的#abc不存在报错,核心是DBVisualizer默认的执行逻辑和SQL Server SSMS不同:DBVisualizer默认会逐句提前解析校验所有SQL语句,在前面的CREATE TABLE #abc还没实际执行的情况下,后面引用#abc的语句就会在校验阶段触发对象不存在的错误。而SQL Server的执行逻辑是按顺序执行前序语句后再校验后续依赖语句,所以可以直接执行整段多临时表脚本。
解决方案
方案1:修改执行配置(推荐,可直接整段执行多临时表脚本)
- 打开DBVisualizer顶部菜单栏的「工具」→「工具属性」,进入配置面板
- 依次展开「SQL编辑器」→「SQL执行」分类,勾选将整个缓冲区作为单个批次执行,该配置会把你选中的全部代码作为一个整体提交给目标数据库解析执行,跳过工具本地的逐句预校验
- 额外取消勾选「执行前校验SQL」选项,避免本地预校验提前抛出不存在的错误
方案2:分步执行
如果暂时不想修改全局配置,可手动分段执行语句:
- 先选中创建
#abc的代码段,单独执行确认创建成功
drop table if exists #abc; create table #abc as select a.ID, a.EMP from sandbox.table1 as a;
- 再选中后续创建
#cde的代码段执行即可
drop table if exists #cde; create table #cde as select a2.ID, sum(a1.sum) as Rev from sandbox.table2 as a1 join #abc as a2 on a1.ID = a2.ID group by a2.ID;
注意事项
如果你的目标数据库是Hive/Spark SQL等大数据组件,需要确认临时表的会话作用域:整段脚本执行过程中不要断开当前数据库连接,否则临时表会被自动清理导致找不到。
内容的提问来源于stack exchange,提问作者Pavan Koundinya Kaipa
相关产品推荐
相关产品推荐

