--提供方式方法
--根据你的数据库的纳容度,如更新5000条最快,则
begin tran
while 1=1
begin
update top(5000) t set x=0
where 条件;
if @@rowcount<5000 break;
end
while 1=1
begin
update top(5000) t set x=x+1
where 条件;
if @@rowcount<5000 break;
end if @@error <>0 rollback tran
else commit tran;
--根据你的数据库的纳容度,如更新5000条最快,则
begin tran
while 1=1
begin
update top(5000) t set x=0
where 条件;
if @@rowcount<5000 break;
end
while 1=1
begin
update top(5000) t set x=x+1
where 条件;
if @@rowcount<5000 break;
end if @@error <>0 rollback tran
else commit tran;
--如ID为唯性列
SELECT ID INTO # FROM t
WHERE ( a1 = v1
OR a2 = v1
OR a3 = v1
OR a4 = v1
OR a5 = v1
OR a6 = v1
OR a7 = v1
)
AND ( b1 = v2
OR b2 = v2
OR b3 = v2
OR b4 = v2
OR b5 = v2
OR b6 = v2
OR b7 = v2
)
AND ( c1 = v3
OR c2 = v3
OR c3 = v3
OR c4 = v3
OR c5 = v3
OR c6 = v3
OR c7 = v3
)
AND ( d1 = v4
OR d2 = v4
OR d3 = v4
OR d4 = v4
OR d5 = v4
OR d6 = v4
OR d7 = v4
)
AND ( e1 = v5
OR e2 = v5
OR e3 = v5
OR e4 = v5
OR e5 = v5
OR e6 = v5
OR e7 = v5
)
WHILE EXISTS(SELECT 1 FROM #)
BEGIN
UPDATE t
SET x = 0
WHERE ID IN(SELECT TOP 10 ID FROM # )
--删除已更新记录
DELETE # WHERE ID IN(SELECT TOP 10 ID FROM #)
END
你这个情况是 数据库设计有问题,那么多的or ,where后面那一堆的or 和and,导致语句复杂异常,最关键的是 就算要建索引,也不知道怎么建了,因为那么多字段 根本就不知道应该给哪些字段建索引了。