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

SQL Server 2012中使用T-SQL将查询结果插入临时表的问题

解决SQL Server临时表创建与插入的语法问题

嘿,我来帮你排查下代码里的问题~你的代码主要有两个关键问题导致语法错误:

  1. 创建临时表时没有定义列结构:SQL Server不知道#temptable应该包含哪些列,插入数据时自然会报错。
  2. 不必要的GO分隔符:它会把语句拆成独立批处理,虽然本地临时表在会话内有效,但这里用GO完全没必要,反而容易造成逻辑脱节。

下面给你两种可行的解决方案,按需选择:

方法一:先定义临时表结构,再插入数据

这种方式适合你明确知道列类型的场景,能更精准地控制临时表的结构:

USE MyDatabase;
-- 先创建匹配原表列结构的临时表,注意列类型要和MYLIST中的对应列一致
CREATE TABLE #temptable (
    [Col A] VARCHAR(100), -- 替换成实际的列类型,比如INT/DATETIME等
    [Col B] INT,
    [Col C] DATE
);

-- 向临时表插入筛选后的数据
INSERT INTO #temptable ([Col A], [Col B], [Col C])
SELECT [Col A], [Col B], [Col C] 
FROM MYLIST 
WHERE [MONTH OF STAY] = '2018-03-01' 
  AND [Property] = 'ABC';

-- 查询临时表数据
SELECT * FROM #temptable;

方法二:用SELECT INTO一键创建并插入(更简洁)

如果你不想手动定义列结构,这种方式会让SQL Server自动根据查询结果生成临时表的列,非常高效:

USE MyDatabase;

-- 直接通过SELECT语句创建临时表并插入数据
SELECT [Col A], [Col B], [Col C]
INTO #temptable
FROM MYLIST 
WHERE [MONTH OF STAY] = '2018-03-01' 
  AND [Property] = 'ABC';

-- 查询临时表数据
SELECT * FROM #temptable;

小提示

  • 本地临时表(以#开头)仅在当前查询会话中存在,关闭窗口后会自动被SQL Server删除;如果需要跨会话共享,可改用全局临时表(以##开头)。
  • 确保[MONTH OF STAY]列的类型和你传入的'2018-03-01'匹配,如果是日期类型,这个写法没问题;如果是字符串类型,要确认原表中的格式一致。

内容的提问来源于stack exchange,提问作者user3115933

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:35:12