You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Teradata WITH子句SQL透传创建SAS数据集报错解决方法

报错原因

代码触发语法错误是3处写法问题导致:

  • CTE(WITH语句定义的临时结果集)仅在定义多个时才需要用逗号分隔,你只定义了1个CTE,CTE定义的闭合括号后多余的逗号直接触发了Teradata的语法校验,也就是报错提示的逗号后缺少标识符的问题
  • 你给CTE命名为table,属于SQL通用保留关键字,直接使用会触发标识符解析异常
  • 最后查询的对象写错了:WITH定义的CTE仅在Teradata透传的括号内部生效,你写的from Data是外层SAS要输出的数据集名,在Teradata侧不存在这个对象,应该查询你定义的CTE本身。
修正后可直接运行的代码
Proc sql;
connect to teradata(%login);
create table Data as 
select * from connection to teradata
(
    with tmp_tb as (
        select id, amount from TeradataTable
    )
    select distinct id from tmp_tb
);
Quit;
补充说明
  • SAS的Teradata透传模式下,connection to teradata()括号内的所有SQL完全遵循Teradata原生语法规则,和外层SAS SQL语法无关,写法要符合Teradata的要求
  • 日常写SQL尽量避开用table、date、select这类保留字作为表、CTE、字段的别名,减少不必要的语法报错
  • 如果需要定义多个CTE,参考如下Teradata原生写法:
with cte1 as (
    select id from source_table1
),
cte2 as (
    select id, amt from source_table2
)
select a.id, b.amt 
from cte1 a 
left join cte2 b 
on a.id = b.id

内容的提问来源于stack exchange,提问作者ckp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:51:21