求助:如何借助WITH子句创建新SQL表?
问题分析与解决方案
你使用的是SQL Server,它不支持CREATE TABLE ... AS (SELECT ...)这类语法,同时你当前代码把创建新表的核心逻辑注释掉了,这就是无法创建新表的原因。以下是两种可行的解决方法:
方法1:用SELECT INTO直接创建新表
这是最简便的方式,会自动根据查询结果的结构生成新表:
DROP TABLE IF EXISTS #TEMP_TREINAMENTO_RAW_DATA; SELECT * INTO #TEMP_TREINAMENTO_RAW_DATA FROM [TB_STG_SAMS_TREINAMENTO_RAW_DATA]; WITH TABLE_RAW_DATA AS ( SELECT * FROM #TEMP_TREINAMENTO_RAW_DATA A WITH (NOLOCK) -- 11907 CLIENTES ) -- 直接通过SELECT INTO创建目标表 SELECT * INTO NEW_TABLE FROM TABLE_RAW_DATA A LEFT JOIN (SELECT * FROM [TB_SAMS_QUADRO_FUNCIONARIOS] A WITH (NOLOCK)) B ON A.RE = B.NR_RE;
注意:如果关联的两张表存在同名非关联字段,SELECT *会触发重复列报错,建议明确指定需要的列名,避免冲突。
方法2:先定义表结构再插入数据
如果需要自定义表结构、添加约束或默认值,可采用这种方式:
-- 先创建新表,需根据实际业务字段调整列定义 CREATE TABLE NEW_TABLE ( RE VARCHAR(50), NR_RE VARCHAR(50), -- 补充其他需要的字段及属性... ); DROP TABLE IF EXISTS #TEMP_TREINAMENTO_RAW_DATA; SELECT * INTO #TEMP_TREINAMENTO_RAW_DATA FROM [TB_STG_SAMS_TREINAMENTO_RAW_DATA]; WITH TABLE_RAW_DATA AS ( SELECT * FROM #TEMP_TREINAMENTO_RAW_DATA A WITH (NOLOCK) -- 11907 CLIENTES ) -- 向新表插入数据 INSERT INTO NEW_TABLE SELECT A.RE, B.NR_RE, -- 明确指定其他需要的字段... FROM TABLE_RAW_DATA A LEFT JOIN (SELECT * FROM [TB_SAMS_QUADRO_FUNCIONARIOS] A WITH (NOLOCK)) B ON A.RE = B.NR_RE;
内容的提问来源于stack exchange,提问作者Roberta_Gomes
相关产品推荐
相关产品推荐

