更新数据的脚本

本文介绍了一种使用T-SQL在SQL Server中进行高效批量更新记录的方法。通过使用ROWLOCK提示和TOP(@Rows)子句结合WHILE循环,可以有效地避免锁竞争并减少内存使用。此外,还展示了如何通过子查询和EXISTS谓词来实现条件更新。

 

--UPDATE dbo.Notice WITH(ROWLOCK) SET IsNoAOG=0,IsSection35=0 WHERE IsNoAOG IS NULL AND IsSection35 IS NULL

DECLARE @Rows INT = 50000

WHILE 1=1 BEGIN    UPDATE TOP (@Rows) dbo.Notice WITH (ROWLOCK)   SET IsNoAOG=0,IsSection35=0   FROM dbo.Notice n   WHERE IsNoAOG IS NULL AND IsSection35 IS NULL    IF @@RowCount < @Rows   BREAK END

--==================================

DECLARE @Rows INT = 50000

WHILE 1=1 BEGIN  ;WITH Part1 AS (   SELECT DISTINCT NotIntNo FROM dbo.Charge c WITH (NOLOCK) WHERE ChgNoAOG = 'Y' AND ChargeStatus < 900  )  UPDATE TOP (@Rows) dbo.Notice WITH (ROWLOCK)   SET IsNoAOG = 1   FROM dbo.Notice n   WHERE ISNULL(IsNoAOG, 0) = 0    AND NoticeStatus < 900    AND EXISTS (     SELECT 1 FROM Part1 p WITH (NOLOCK) WHERE p.NotIntNo = n.NotIntNo    )    IF @@RowCount < @Rows   BREAK END

 

转载于:https://www.cnblogs.com/sxjljj/p/8527189.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值