当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 将一个更新划分为几个批次

MSSQL
保护SQL Server 2000的十个步骤
突破一流信息监控拦截系统进行SQL注射
Oracle8的不安全因素及几点说明
数据库安全性策略(1)
数据库安全性策略 (2)
浅谈数据库的攻击
SQL数据库的一些攻击
怎样使MySQL安全以对抗解密高手
不当编写SQL语句导致系统不安全
调整重心-从IIS到SQL Server数据库安全
SQL Server:安全设计从头起
保护SQL Server:为安全性而安装
网站入侵过程!
网管,你的防火墙上也有“洞”吗
跟我学SQL:(三)使用SQL子选择来合并查询
跟我学SQL:(四)查询多个表格
跟我学SQL:(五)创建和修改表格
跟我学SQL:(六)串行数据类型
跟我学SQL:(八)数值数据类型
跟我学SQL:(九)datetime和interval数据类型

MSSQL 中的 将一个更新划分为几个批次


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 142 ::
收藏到网摘: n/a

 

问:我想以一次5,000行的方式批量更新一个大型表,但我不知道怎样分割数据。该表不包含增量数字或整数主键。怎样才能在保持良好性能的同时实现数据更新呢?

答:如果知道哪些行尚未被更新,您可以使用简单的谓词来排除已更新的行,ROWCOUNT设置可以帮助您批量分割数据。以下的代码清单说明了如何使用该设置:

SET ROWCOUNT 1000
WHILE (1=1) BEGIN
   BEGIN TRANSACTION
   UPDATE...set ...,MyLastUpdate='date',...WHERE
     MyLastUpdate < 'date'
     -- 更新1000未更新行
   IF @@ROWCOUNT = 0
   BEGIN
    COMMIT TRANSACTION
    BREAK
   END
   COMMIT TRANSACTION
END

在指定的行数返回后,ROWCOUNT将使SQL Server停止查询处理。这项技术很有用,因为它避免了大量更新所致的并发命中;更新中的行数越少,更新任务使其他用户不能访问该数据的可能性就越小。结合事务日志备份,这一方法还可以使您的事务日志的大小降至最低。

如果没有识别已更新行的机制,您可以使用游标遍历所有数据并提交每个x值。但是,游标占用服务器资源的时间通常要多于基于集合的语句。

—Microsoft SQL Server开发团队