我现在就是用存储过程,但不可避免地要update某个字段的值。
我说过,我的表很大,如何避免每次扫描整个表或重建索引?

解决方案 »

  1.   

    最好方法:
       你建库时建流水号主键,并且禁止删除
       那是不是简单.
       如果允许删除,你将主键不设为标识,你自己写存储过程根据max值得到新记录的ID。
       这样做绝对快快快...
                                                         呵呵
      

  2.   

    你似乎没有理解我的意思
    我的问题是Select then Update
      

  3.   

    你只要在另一个表或全局临时表(##)中存放当前记录号
    select then update ##临时表 set MyNumber=MyNumber+100
      

  4.   

    坦率地说我也是这样设计的,不过有个问题
    如何实现绕回,即检索到最后几行时,又回到开头?
    DECLARE @CUR INT
    SELECT @CUR = CUR FROM TABLEA -- 存储当前的记录号
    UPDATE TABLEA SET CUR = CUR + 100
    SELECT TOP 100 * FROM TABLEB WHERE FIELDA > @CUR
    请再次指教
      

  5.   

    DECLARE @CUR INT
    SELECT @CUR = CUR FROM TABLEA -- 存储当前的记录号
    UPDATE TABLEA SET CUR = CUR + 100
    SELECT TOP 100 * FROM TABLEB WHERE FIELDA > @CUR
    -----------------------------------------^^^-----???
      

  6.   

    DECLARE @CUR INT
    SELECT @CUR = CUR FROM TABLEA -- 存储当前的记录号
    if exists(SELECT * FROM TABLEB WHERE FIELDA>@CUR)
      UPDATE TABLEA SET CUR = CUR + 100
    else
      UPDATE TABLEA SET CUR =100
    select * from TABLEB WHERE FIELDA>@CUR-100 and FIELDA<@CUR