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

从两个临时表插入数据至第三个临时表报错的技术咨询

问题分析与解决方案

首先明确说:你的这种处理方式完全不正确,这正是触发报错的核心原因。

错误原因拆解

你当前的代码逻辑存在两个致命问题:

  1. 第一条INSERT INTO #3 (...) SELECT Vrsta_Reprograma FROM #1中,INSERT指定了9个目标列,但SELECT仅返回1列,直接违反了「SELECT值数量必须匹配INSERT列数」的规则,这就是你收到报错的直接原因;
  2. 后面的SELECT (...) FROM #2是完全独立的SQL语句,和前面的INSERT没有任何关联,而且语法本身就有问题(最后一个列名后面多了个多余的逗号)。

简单来说,INSERT INTO ... SELECT ...的核心规则是:SELECT返回的列数、数据类型、顺序必须和INSERT指定的目标列完全对应,你不能拆成两个SELECT来凑列。

正确的处理方式(分两种业务场景)

你需要先明确自己的业务需求,再选择对应的方案:

场景1:#1和#2的数据是关联的(合并列成为一行)

如果#1的每条记录对应#2的一条记录,需要把两者的字段组合成#3的一行,用JOIN关联两个表(记得补充符合你业务逻辑的关联条件):

CREATE TABLE #3 ( 
Vrsta_Reprograma int, 
Datum_Kreiranja smalldatetime NOT NULL, 
Verzija smallint NULL, 
Zakljucano smallint NULL, 
HostName nvarchar(128) NULL, 
Datum_Izvjestaja varchar(10) NULL, 
Aplikacija varchar(10) NULL, 
OJK varchar(12) NULL, 
PartnerID int NULL 
) 

INSERT INTO #3 ( 
Vrsta_Reprograma, 
Datum_Kreiranja, 
Verzija, 
Zakljucano, 
HostName, 
Datum_Izvjestaja, 
Aplikacija, 
OJK, 
PartnerID 
) 
SELECT 
    t1.Vrsta_Reprograma,
    t2.Datum_Kreiranja,
    t2.Verzija,
    t2.Zakljucano,
    t2.HostName,
    t2.Datum_Izvjestaja,
    t2.Aplikacija,
    t2.OJK,
    t2.PartnerID
FROM #1 t1
-- 替换成你实际的关联条件,比如t1.关联列 = t2.关联列
JOIN #2 t2 ON t1.PartnerID = t2.PartnerID

场景2:#1和#2的数据是独立的行(合并行插入)

如果是要把#1的记录和#2的记录分别插入#3作为独立行,需要用UNION ALL合并两个查询,每个查询都要返回9列(缺少的字段用NULL填充,注意Datum_Kreiranja是NOT NULL约束,不能用NULL,必须给有效值):

CREATE TABLE #3 ( 
Vrsta_Reprograma int, 
Datum_Kreiranja smalldatetime NOT NULL, 
Verzija smallint NULL, 
Zakljucano smallint NULL, 
HostName nvarchar(128) NULL, 
Datum_Izvjestaja varchar(10) NULL, 
Aplikacija varchar(10) NULL, 
OJK varchar(12) NULL, 
PartnerID int NULL 
) 

INSERT INTO #3 ( 
Vrsta_Reprograma, 
Datum_Kreiranja, 
Verzija, 
Zakljucano, 
HostName, 
Datum_Izvjestaja, 
Aplikacija, 
OJK, 
PartnerID 
) 
-- 插入#1的数据,NOT NULL的Datum_Kreiranja给个有效值,比如当前时间
SELECT 
    Vrsta_Reprograma,
    GETDATE(),
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL
FROM #1
UNION ALL
-- 插入#2的数据,Vrsta_Reprograma用NULL填充
SELECT 
    NULL,
    Datum_Kreiranja,
    Verzija,
    Zakljucano,
    HostName,
    Datum_Izvjestaja,
    Aplikacija,
    OJK,
    PartnerID
FROM #2

额外注意事项

  • 针对Datum_Kreiranja的NOT NULL约束:如果场景2中#1没有对应的日期值,你可以在建表时给该列加DEFAULT GETDATE()默认值,或者插入时明确提供合法的日期值,避免触发约束报错;
  • 确保两个临时表的字段数据类型和#3的目标列匹配,避免隐式转换带来的意外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:21:29