SQL HARE for SAP HANA是否支持将INSERT与CTE(公用表表达式)一起使用?

时间:2018-02-12 14:32:33

标签: sap sql-insert common-table-expression hana hana-sql-script

我知道这不是一个特定的代码或问题,但我遇到一个非常类似问题的问题(除了他们的SQL Server):Combining INSERT INTO and WITH/CTE ...和我似乎无法在任何SAP HANA帮助论坛等上找到它。所以认为这里可能有专家可以给我一个简单的是或否答案。

我使用的SQL语句包含多个 CTE,但是当我尝试插入它时,告诉我INSERT这个词周围有一个语法错误。它的布局与我上面链接的问题(花费数小时检查)完全相同,我可以在必要时发布代码示例,但我只是想知道它是否首先得到支持!感谢

3 个答案:

答案 0 :(得分:1)

简答: 不,INSERT / UPDATE语句不支持CTE。

更长的回答: SQLScript的INSERT / UPDATE命令实际上是“借用”的SQL命令documentation explains

检查SQL INSERT的文档,我们发现它是supports a subquery作为值的来源。

子查询术语被定义为SQL SELECT语句的一部分。检查documentation for SELECT表示<subquery><with_clause>是不同的,不重叠的字词。

这意味着,CTE不能在子查询中使用,因此不能成为INSERT / UPDATE命令中使用的子查询的一部分。

但是,您可以在SQLScript块的INSERT语句中使用SQLScript 表变量,这与CTE非常相似:

DO BEGIN
  te_a := SELECT 10, 'xyz' as VAL from dummy;
  te_b := SELECT 20, 'abc' as VAL from dummy;

  te_all :=     SELECT * from :te_a
      UNION ALL SELECT * from :te_b;

  INSERT INTO VALS 
             (SELECT * from :te_all);

END;

答案 1 :(得分:0)

在许多情况下,您可以将CTE转换为Sub-Select语句

您可以使用以下

insert into city (city, countryid, citycode)
select
    city, countryid, citycode
from (
    -- CTE Expression as subselect
    select * from city
    -- end (CTE)
) cte

而不是使用以下有效的CTE命令结合INSERT(在SQL Server上)

with cte as (
    select * from city
)
insert into city (city, countryid, citycode)
select
    city, countryid, citycode
from cte

答案 2 :(得分:0)

SAP HANA包含此可能性,代码顺序与SQL Server不同:

CollectionFactory