Sql 编写脚本以使用递增变量重复更新查询

Sql 编写脚本以使用递增变量重复更新查询,sql,vba,ms-access,Sql,Vba,Ms Access,我有表a: a.si a.p a.pnsi si是唯一的id,p是双精度的,pnsi是null 我想使用带有变量n的子查询在pnsi上运行更新查询: (SELECT si FROM a as y WHERE y.si = a.si + n AND y.p > a.p) 我希望能够对n的值从1递增到100000运行此查询,每次仅对pnsi仍然为null的其余记录运行此查询 该查询有两个条件: 1.选择y.si作为a.pnsi的si值大于a.si 2.那个y.p比a.p大 这样做的目的是减

我有表a:

a.si
a.p
a.pnsi
si是唯一的id,p是双精度的,pnsi是null

我想使用带有变量n的子查询在pnsi上运行更新查询:

(SELECT si FROM a as y WHERE y.si = a.si + n AND y.p > a.p)
我希望能够对n的值从1递增到100000运行此查询,每次仅对pnsi仍然为null的其余记录运行此查询

该查询有两个条件: 1.选择y.si作为a.pnsi的si值大于a.si 2.那个y.p比a.p大

这样做的目的是减少处理时间,因为此过程将在一个包含100多万条记录的表上运行,并且大多数情况下,可以使用非常小的n值找到正确的解决方案。通过以这种方式运行,Access将计算n=1,2。。。上升,导致极少数记录中n将一直增加到100000


我需要的是一个脚本,通过n的值递增,在剩余的空记录上重复更新查询n次。脚本需要将n变量的当前值发送到更新查询y.si=a.si+n。当没有更多记录要更新或n达到100000时,循环停止。有什么想法吗?

VBA过程可以有如下代码:

Dim rs As DAO.Recordset, lngCnt As Long
Set rs = CurrentDb.OpenRecordset("SELECT * FROM a WHERE pnsi Is Null;")
For lngCnt = 1 to 100000
    If Not rs.EOF Then
        rs.Edit
        rs!pnsi = lngCnt
        rs.Update
        rs.MoveNext
    Else
        Exit For
    End If
Next

没有真正理解WHERE标准。为什么一定要增加?编辑问题以显示样本数据和所需结果。