SqlServer_update set from的用法整理

本文介绍SQL Server中批量更新数据的方法,包括从其他表获取数据进行更新、表自连接更新及关联表汇总更新等实用技巧。

update set from 常用格式:

---不使用别名
UPDATE A  SET A1 = B1, A2 = B2, A3 = B3  
FROM A 
LEFT JOIN B ON A.ID = B.ID
--使用别名
UPDATE v1  SET A1 = B1, A2 = B2, A3 = B3  
FROM A as v1
LEFT JOIN B ON v1.ID = B.ID

一、批量更新操作,数据来自其他表的列或本表的其他列

注:

  1. SqlServer update语句后面的table名称,是不可以启用别名的。

  2. 对应不同表的字段更新可以如下:

update Member_Info set MemberLevelName=(
select LevelName from Sys_Level 
where MemberLevelId=LevelId);
go

二、update set from 批量更新实例

  1. 不同表的修改
update Member_Info set MemberLevelName=L.LevelName
from Member_Info 
inner join Sys_Level L
on MemberLevelId=L.LevelId
  1. 表的自连接更新
update v1
set RecommendName=v1.NickName
from Member_Info as v1  
inner join Member_Info as v2 on v1.MemberId=v2.RecommendId
  1. 关联表先汇总,然后更新字段
update t1
set InterestFreeze-=Amount,InterestThaw+=Amount
from Member_Info t1
inner join (
select MemberID,sum(Amount) as Amount from Member_Interest
where Type=1 and DaySum=10
group by MemberID
)  t2
on t1.MemberId=t2.MemberID
### SQL Server 中 UPDATE SET 语句的用法和语法 在 SQL Server 中,`UPDATE SET` 语句用于更新数据库表中的现有记录。其基本语法结构如下: ```sql UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; ``` 其中: - `table_name`: 要更新数据的目标表名称。 - `column1 = value1, column2 = value2,...`: 表示需要更新的具体列及其对应的值。可以同时设置多个列的值。 - `condition`: 可选参数,定义哪些行应该被更新。如果省略此条件,则会更新表中的所有行。 #### 使用 JOIN 进行复杂更新 当需要基于另一个表的数据来更新当前表时,可以通过 `JOIN` 来实现复杂的更新逻辑。以下是两种常见的写法: ##### 不使用别名的方式 ```sql UPDATE A SET A.A1 = B.B1, A.A2 = B.B2, A.A3 = B.B3 FROM A LEFT JOIN B ON A.ID = B.ID; ``` 这种形式适用于简单的关联场景,并且不需要额外引入临时变量或者更深层次的关系处理[^4]。 ##### 使用别名简化表达 为了使查询更加清晰易读,也可以给每个涉及的表格赋予短小的名字作为替代符(即所谓的“别名”)。例如下面的例子展示了如何通过这种方式来进行相同的操作: ```sql UPDATE v1 SET v1.A1 = B.B1, v1.A2 = B.B2, v1.A3 = B.B3 FROM A AS v1 LEFT JOIN B ON v1.ID = B.ID; ``` 这里我们将原表A命名为v1以便后续引用更为简洁明了。 #### 实际案例分析 考虑这样一个需求:我们需要把测试订单标记为已完成状态(`order_flag=1`),前提是这些订单编号存在于另一张确认过的清单里(test1)。那么可以用到之前提到的方法之一完成这项工作: ```sql UPDATE dbo.test SET order_flag = 1 WHERE order_no IN (SELECT order_no FROM dbo.test1); ``` 这段脚本首先找出那些符合条件(存在於test1内的order_no)的所有项目列表;接着再利用这个集合去匹配目标表(test),从而达到批量更改特定字段的目的[^5]。 另外值得注意的是,在某些版本之后像 SQLite 那样的系统也开始支持一种新的叫做 'UPDATE...FROM' 的特殊模式,它允许开发者直接指定源表而无需借助子查询等形式间接获取所需资料[^3]。不过对于主流关系型数据库管理系统来说,传统做法依然是最普遍接受的形式。 ### 结论 综上所述,无论是基础还是高级的应用场合下,掌握好标准SQL里的Update机制都是非常重要的技能点之一。合理运用Where子句能够有效控制影响范围避免误操作带来的风险;与此同时灵活搭配Join技术则让跨表联动成为可能极大增强了实际解决问题的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值