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

SELECT INTO能否向已有表插入数据?关联表字段更新异常求助

问题解答

1. SELECT INTO能否向已存在的表插入数据?

直接给结论:不行。SELECT INTO的核心作用是创建一个全新的表,再把查询结果插入到这个新表里。如果目标表已经存在,执行这条语句会直接报错。要是你想往已存在的表插入新行,得用INSERT INTO ... SELECT ...的组合,但这仅适用于新增记录的场景——显然你现在的需求不是加新行,而是更新已有数据,所以这条语法完全不对路。

2. 你的场景正确解决方案

你之前用INSERT INTO ... SELECT ...得到新增行,完全是意料之中的事,因为INSERT的本职工作就是添加新记录,它根本不会去碰已有的行。要更新test表中匹配LoadID的comment字段,得用UPDATE结合表关联的写法:

基础更新(单条匹配数据)

如果temp表中每个LoadID只对应一条comments记录,用这条语句就够了:

UPDATE t
SET t.comment = temp.comments
FROM [test] t
INNER JOIN temp ON t.LoadID = temp.LoadID
WHERE t.LoadID IS NOT NULL;

这里给test表起了别名t,通过INNER JOIN和temp表的LoadID做匹配,直接把temp的comments赋值给test的comment字段,只会更新匹配到的现有行,不会新增。

多匹配数据拼接(符合你的期望结果)

看你期望的结果是把多个comments拼起来(比如abc,abcdef,abcdefg),说明temp表中同一个LoadID对应多条记录。这时候需要用聚合函数把这些comments拼接起来,以SQL Server为例,可以用STRING_AGG函数:

UPDATE t
SET t.comment = STRING_AGG(temp.comments, ',')
FROM [test] t
INNER JOIN temp ON t.LoadID = temp.LoadID
WHERE t.LoadID IS NOT NULL
GROUP BY t.LoadID, t.name, t.comment;

这条语句会把同一个LoadID对应的所有comments用逗号连接起来,更新到test表的comment字段里,正好满足你的需求。

内容的提问来源于stack exchange,提问作者Mobeen Tahir Latif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:27:28