🌹欢迎来到《小5讲堂》🌹
🌹这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。🌹
🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!🌹
👨💻 作者简介
🏆 荣誉头衔:2024博客之星Top14 | CSDN博客专家 | 阿里云专家博主
🎤 经历 :曾多次进行线下演讲,亦是 CSDN内容合伙人 以及 新星优秀导师
💡 信念 :"帮助别人,成长自己!"
🚀 技术领域:深耕全栈,精通 .NET Core (C#)、Python、Java,熟悉主流数据库
🤝 欢迎交流:无论是基础概念还是进阶实战,都欢迎与我探讨!

目录
- ✨前言
- [标准写法(使用 JOIN)](#标准写法(使用 JOIN))
- 具体示例
- 其他常用场景
-
- [1. 使用 LEFT JOIN(只更新匹配的行,不匹配的保持原值)](#1. 使用 LEFT JOIN(只更新匹配的行,不匹配的保持原值))
- [2. 使用子查询](#2. 使用子查询)
- [3. 更新为 A 表的聚合值](#3. 更新为 A 表的聚合值)
- 注意事项
- 实例
- 文章推荐
✨前言
不知道大家有没有这样的感受,每隔一段时间,有些sql写法大概记得,但是真正手写的时候还是有点无从下手,哈哈哈。
我知道可以写sql语句批量更新某个表字段给两外一个表字段,少用就很快生疏了,但是我们对基本的概念和用法还是记得的,所以现在的AI工具很大程度帮我们记住这些写法,有好处也有坏处吧。
趁这次机会,又重新回顾下sql一些基础用法,Let's Go
在 SQL Server 中,将 A 表的 a 字段更新到 B 表的 a 字段,常见写法取决于两表之间的关联条件。
标准写法(使用 JOIN)
sql
UPDATE B
SET B.a = A.a
FROM B
INNER JOIN A ON B.关联字段 = A.关联字段
具体示例
假设 A 表(源表)和 B 表(目标表)通过 id 字段关联:
sql
-- 创建示例表
CREATE TABLE A (id INT, a VARCHAR(50));
CREATE TABLE B (id INT, a VARCHAR(50));
-- 插入数据
INSERT INTO A VALUES (1, 'value1'), (2, 'value2');
INSERT INTO B VALUES (1, 'old1'), (2, 'old2'), (3, 'old3');
-- 更新 B.a = A.a
UPDATE B
SET B.a = A.a
FROM B
INNER JOIN A ON B.id = A.id;
其他常用场景
1. 使用 LEFT JOIN(只更新匹配的行,不匹配的保持原值)
sql
UPDATE B
SET B.a = A.a
FROM B
LEFT JOIN A ON B.id = A.id;
2. 使用子查询
sql
UPDATE B
SET B.a = (SELECT A.a FROM A WHERE A.id = B.id)
WHERE EXISTS (SELECT 1 FROM A WHERE A.id = B.id);
3. 更新为 A 表的聚合值
sql
UPDATE B
SET B.a = A.sum_value
FROM B
INNER JOIN (
SELECT id, SUM(a) AS sum_value
FROM A
GROUP BY id
) A ON B.id = A.id;
注意事项
- 确保有 WHERE 条件或正确的 JOIN:避免全表更新
- 先备份或测试 :使用
BEGIN TRANSACTION和ROLLBACK验证 - 注意数据类型:A.a 和 B.a 的数据类型必须兼容
- 考虑 NULL 值:如果 A.a 为 NULL,B.a 也会被更新为 NULL
sql
-- 安全测试示例
BEGIN TRANSACTION
UPDATE B
SET B.a = A.a
FROM B
INNER JOIN A ON B.id = A.id;
-- 检查结果
SELECT * FROM B;
-- 确认无误后提交,否则回滚
-- COMMIT
-- ROLLBACK
实例
在update更新前,可以使用select进行查询看下是否正确,毕竟在生产环境一键覆盖了,
如果更新的字段多,且有覆盖的情况,最好做一次数据库表备份。


文章推荐
【数据库】Sql Server,A表的a字段更新到B表的a字段,基础知识点,一分钟拿下
【数据库】Sql Server数据库中isnull、iif、case when三种方式的使用和空值判断
【数据库】如何使用一款轻量级数据库SqlSugar进行批量更新,以及查看最终的Sql操作语句
【数据库】使用Sql Server将分组后指定字段的行数据转为一个字段显示,并且以逗号隔开每个值,收藏不迷路
【数据库】SQL Server 查询条件小技巧:ISNULL 函数的使用,有请DeepSeek来辅助讲解下
【Sql Server】在SQL Server中生成雪花ID(Snowflake ID)
【Sql Server】使用row_number over方式进行表分页,数据量达到五千多条记录后,查询变慢需要20多秒的解决方案
【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用
【Sql Server】锁表如何解锁,模拟会话事务方式锁定一个表然后进行解锁
【Sql Server】通过Sql语句批量处理数据,使用变量且遍历数据进行逻辑处理
【新星计划回顾】第六篇学习计划-通过自定义函数和存储过程模拟MD5数据
【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点
【Sql Server】Update中的From语句,以及常见更新操作方式
【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录
【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型
总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。