Sql Server,A表的a字段更新到B表的a字段,基础知识点,一分钟拿下
|
freeflydom
2026年7月3日 15:39
本文热度 72
|
在 SQL Server 中,将 A 表的 a 字段更新到 B 表的 a 字段,常见写法取决于两表之间的关联条件。
标准写法(使用 JOIN)
UPDATE B
SET B.a = A.a
FROM B
INNER JOIN A ON B.关联字段 = A.关联字段
具体示例
假设 A 表(源表)和 B 表(目标表)通过 id 字段关联:
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');
UPDATE B
SET B.a = A.a
FROM B
INNER JOIN A ON B.id = A.id;
其他常用场景
1. 使用 LEFT JOIN(只更新匹配的行,不匹配的保持原值)
UPDATE B
SET B.a = A.a
FROM B
LEFT JOIN A ON B.id = A.id;
2. 使用子查询
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 表的聚合值
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
BEGIN TRANSACTION
UPDATE B
SET B.a = A.a
FROM B
INNER JOIN A ON B.id = A.id;
SELECT * FROM B;
实例
在update更新前,可以使用select进行查询看下是否正确,毕竟在生产环境一键覆盖了,
如果更新的字段多,且有覆盖的情况,最好做一次数据库表备份。


转自https://blog.csdn.net/lmy_520/article/details/160294800
该文章在 2026/7/3 15:40:08 编辑过