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

SQL Server中无法将WITH ROWS子句结果插入临时表求助

解决临时表插入失败的问题

我来帮你搞定这个临时表插入的问题!你的核心问题在于临时表#tempTest没有预先定义结构,而且Insert语句中CTE的用法不符合语法要求,下面给你两种可行的解决方案:

方法一:先创建临时表,再插入数据

先明确临时表的列结构(你的查询返回的是整数类型的分钟差值,所以定义一个int类型的列即可),再结合CTE完成插入:

IF OBJECT_ID('tempdb..#tempTest') IS NOT NULL DROP TABLE #tempTest
-- 先创建临时表,定义列结构
CREATE TABLE #tempTest (
    DiffMinutes INT
)
-- 结合CTE插入数据
WITH rows AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY [発生時刻]) AS rn
    FROM [PROC_MN].[dbo].[TBL_FINISH_STATUS]
    WHERE PO_NO='GV12762' AND 発生時刻 BETWEEN '2018/03/16' AND '2018/03/18' AND [加工内容]='Bonding'
)
INSERT INTO #tempTest (DiffMinutes)
SELECT DATEDIFF(minute, mc.[発生時刻], mp.[発生時刻])
FROM rows mc JOIN rows mp ON mc.rn = mp.rn - 1

方法二:用SELECT INTO直接创建并插入数据(更简洁)

这种方式不需要提前创建临时表,SQL会自动根据查询结果的字段类型生成临时表结构:

IF OBJECT_ID('tempdb..#tempTest') IS NOT NULL DROP TABLE #tempTest
WITH rows AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY [発生時刻]) AS rn
    FROM [PROC_MN].[dbo].[TBL_FINISH_STATUS]
    WHERE PO_NO='GV12762' AND 発生時刻 BETWEEN '2018/03/16' AND '2018/03/18' AND [加工内容]='Bonding'
)
SELECT DATEDIFF(minute, mc.[発生時刻], mp.[発生時刻]) AS DiffMinutes
INTO #tempTest
FROM rows mc JOIN rows mp ON mc.rn = mp.rn - 1

关键说明

  • 第一种方法适合需要严格控制临时表结构(比如添加约束、默认值)的场景;
  • 第二种方法更快捷,适合快速生成临时表的场景;
  • 两种方法都解决了你之前语句中“未定义临时表就插入”和“CTE与Insert语法错误”的问题。

内容的提问来源于stack exchange,提问作者Cát Tường Vy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:19:39