T-SQL中创建临时表、CTE并插入数据的正确语法咨询
T-SQL临时表+CTE的正确语法写法
你的代码问题在于CTE(WITH子句)的位置错误——在T-SQL里,WITH定义的CTE必须紧跟在要使用它的DML语句(比如INSERT、SELECT)之前,不能放在CREATE TABLE之后。
下面给你两种符合语法规范的写法:
写法1:用CTE直接生成临时表(SELECT INTO)
如果不需要提前定义临时表结构,可以直接通过CTE的查询结果创建临时表:
WITH CTEDefinition AS ( SELECT xyz FROM abc ) SELECT * INTO #lmn -- 临时表名前加#表示本地临时表 FROM CTEDefinition -- 如需关联其他表,示例写法: -- FROM CTEDefinition c -- JOIN 目标表 t ON c.关联字段 = t.关联字段
写法2:先创建临时表结构,再用CTE插入数据
如果需要先指定临时表的字段类型或固定结构,再插入数据:
-- 先创建临时表结构,按需定义字段类型 CREATE TABLE #lmn ( xyz INT -- 替换为实际字段类型 ) -- 定义CTE后立即执行INSERT操作 WITH CTEDefinition AS ( SELECT xyz FROM abc ) INSERT INTO #lmn (xyz) SELECT xyz FROM CTEDefinition -- 关联其他表的示例写法: -- SELECT c.xyz, t.其他字段 -- FROM CTEDefinition c -- JOIN 目标表 t ON c.关联字段 = t.关联字段
注意:T-SQL里的临时表分为本地临时表(#开头)和全局临时表(##开头),日常场景用本地临时表即可,会话结束后会自动删除。
内容的提问来源于stack exchange,提问作者rvphx
相关产品推荐
相关产品推荐

