我知道这不是一个特定的代码或问题,但我遇到一个非常类似问题的问题(除了他们的SQL Server):Combining INSERT INTO and WITH/CTE ...和我似乎无法在任何SAP HANA帮助论坛等上找到它。所以认为这里可能有专家可以给我一个简单的是或否答案。
我使用的SQL语句包含多个 CTE,但是当我尝试插入它时,告诉我INSERT这个词周围有一个语法错误。它的布局与我上面链接的问题(花费数小时检查)完全相同,我可以在必要时发布代码示例,但我只是想知道它是否首先得到支持!感谢
答案 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