我正在开发一个算法用来同步 LAN 上的几台机机进行同一幅图像的并行运算。为了保证客户机上的算法效率,需要返回连续的 a 行。
数据存储在 tabLineTmp 中,内容是从 0 1 2 ... 到 N 的连续记录。
存储过程传入一个参数 int a,代表需要返回多少个连续的行。
我的计划是这样的,只返回 ID 能够被 N 整除的所有记录,然后随机选择其中一条,假设其ID = b。然后再查询 where id >= b and id > b + a 返回一个结果集,并且将它们全部删除。最后返回一个int b即可。如果 a <= 0,则报错退出,如果 a = 1, 则直接随机返回一条的ID, 否则按上述算法来运行。
也可以在记录上加一个随机数字段,但是如果两台机机同时查询,就可能返回同一个 ID,会降低运行效率。a 可以是确定的,客户机上不能改。如果不能在存储过程中实现,我就增加一个字段,在程序生成时将能够整的记录标记下来,查询起来很方便。主要问题是返回一条在随机位置上的记录。
请问这种算法能够通过存储过程来实现吗?有没有更好的方法?对于一个SQL 小白来说,这个东东难度太大了,希望各位高人来拍一砖。
环境是 XPSP2 + SQL2005,程序使用 C#.net 2.0 来做。分不够的话,就另开一贴追加,三克油先。

解决方案 »

  1.   

    沙发改错我的计划是这样的,只返回 ID 能够被 a 整除的所有记录,
      

  2.   

    1、既然是随机的,你在整个a+b似乎没有什么意思。
    2、 id >= b and id > b + a  你的条件只有id》a+b起作用
        直接select top n * from tb order by newid()就行
      

  3.   

    以某条记录a为起点,返回ID与它相邻的B条记录
      

  4.   

    好像有点懂了,请问如果确定随机的第 a 行的 ID 值呢?