You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何借助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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:45:46