--提供方式方法
--根据你的数据库的纳容度,如更新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;

解决方案 »

  1.   

    有条件的UPDATE是基于先查询再更新的,如果你的查询都很慢,update根本快不起来,所以你可以先用select看看速度是否满足
      

  2.   


    --如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
      

  3.   


    你这个情况是 数据库设计有问题,那么多的or ,where后面那一堆的or 和and,导致语句复杂异常,最关键的是 就算要建索引,也不知道怎么建了,因为那么多字段 根本就不知道应该给哪些字段建索引了。