SQL Server 2014中WITH子句结合SELECT * INTO报错求助
SQL Server 2014中CTE结合SELECT INTO备份表的解决方法
你的错误根源有两个:一是CTE不能嵌套在子查询的FROM子句内部,二是原查询的SELECT列列表中缺少逗号,这也是语法错误。
以下是修正后的正确写法:
WITH LIST AS ( SELECT column1 FROM table1 UNION SELECT column1 FROM table2 UNION SELECT column1 FROM table3 WHERE column1 IS NOT NULL ) SELECT a.column1, a.column2, a.column3 INTO backup_table FROM table2 a WHERE a.column6 NOT IN (SELECT column1 FROM LIST) -- 原代码中field1与LIST定义的column1不匹配,需修正 AND a.column3 = '1' -- ORDER BY可移除,SELECT INTO创建的表不会保留排序逻辑
关键修正点说明:
- CTE位置调整:将
WITH LIST AS ...移到整个语句的最开头,CTE必须作为独立的语句块存在,不能嵌套在子查询中。 - 补全列逗号:原查询的
SELECT列表中,a.column1、a.column2之间缺少逗号,这会直接导致语法错误,必须补上。 - 修正子查询列名:原代码中子查询引用的
field1与LIST定义的列名column1不匹配,需统一列名避免报错。 - 移除不必要的子查询包裹:不需要把主查询用
(...) a包裹,SELECT ... INTO可以直接跟在CTE之后执行。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

