Snowflake中DELETE+OUTPUT迁移数据报错:unexpected 'DELETED'
Snowflake中DELETE语句使用OUTPUT子句报错的原因及解决方法
你尝试用以下SQL将table_1的数据迁移至已有数据的table_2:
DELETE FROM table_1 OUTPUT DELETED.* INTO table_2;
执行时触发报错:
SQL compilation error: syntax error line 2 at position 7 unexpected 'DELETED'
报错原因
- 核心原因:
OUTPUT ... INTO是SQL Server专属的语法,Snowflake并不支持该语法结构,因此编译器无法识别DELETED关键字,直接触发语法编译错误。
Snowflake中的替代实现方案
Snowflake中可以通过DELETE的RETURNING子句结合INSERT语句实现相同的迁移+删除逻辑,示例如下:
INSERT INTO table_2 SELECT * FROM ( DELETE FROM table_1 RETURNING * );
如果只需迁移table_1中的特定行,可添加过滤条件:
INSERT INTO table_2 SELECT * FROM ( DELETE FROM table_1 WHERE <你的过滤条件> RETURNING * );
也可以拆分两步执行(如需保证操作原子性,可包裹在事务中):
-- 第一步:将table_1数据插入table_2 INSERT INTO table_2 SELECT * FROM table_1; -- 第二步:删除table_1数据 DELETE FROM table_1;
内容的提问来源于stack exchange,提问作者Ana
相关产品推荐
相关产品推荐

