我需要在一个1.2亿记录表中初始化一个值为-1的新字段.
Update table
set int_field = -1;
Run Code Online (Sandbox Code Playgroud)
我让它运行了5个小时才取消它.
我尝试运行它,事务级别设置为读取未提交的相同结果.
Recovery Model = Simple.
MS SQL Server 2005
Run Code Online (Sandbox Code Playgroud)
如何更快地完成这项工作?
我的UPDATE声明可以更新超过百万条记录.我想分批更新1000或10000.我试过@@ROWCOUNT但我无法得到理想的结果.
仅仅为了测试目的我做了什么,我选择了包含14条记录的表并将行数设置为5.此查询应该更新5,5和4中的记录,但它只更新前5条记录.
查询 - 1:
SET ROWCOUNT 5
UPDATE TableName
SET Value = 'abc1'
WHERE Parameter1 = 'abc' AND Parameter2 = 123
WHILE @@ROWCOUNT > 0
BEGIN
SET rowcount 5
UPDATE TableName
SET Value = 'abc1'
WHERE Parameter1 = 'abc' AND Parameter2 = 123
PRINT (@@ROWCOUNT)
END
SET rowcount 0
Run Code Online (Sandbox Code Playgroud)
查询 - 2:
SET ROWCOUNT 5
WHILE (@@ROWCOUNT > 0)
BEGIN
BEGIN TRANSACTION
UPDATE TableName
SET Value = 'abc1'
WHERE Parameter1 = 'abc' AND Parameter2 = …Run Code Online (Sandbox Code Playgroud) 假设我有数千行要更新.
我计划迭代地进行更新; 通过每次迭代仅更新1000行.
我想迭代,直到没有行要更新.
如何在没有要更新的行之前运行下面的T-SQL脚本?
-- TODO: Create a loop so that it exists when there is no ROW left to be updated;
-- how can I do it?
UPDATE tableToUpdate
SET IsVegetable = 1
WHERE Id IN
(SELECT TOP 1000 Id
FROM tableToUpdate
WHERE Date = '2011-07-23 14:00')
-- Loop ends
Run Code Online (Sandbox Code Playgroud)