--id 是主键吗??如过是。可以这么操作declare @id int
set @id=100
select * from 表 where id in (@id,@id-1,@id+1)

解决方案 »

  1.   

    select * from table where id = @id
    union select * from table where abs(id - @id) = 1
      

  2.   

    --测试:
    Create table #( id int identity(1,1),Name varchar(10))
    insert into # select 'A'
    union all select 'B'
    union all select 'C'
    union all select 'D'--查询
    declare @id int
    set @id=3
    select * from # where id in (@id-1,@id,@id+1)--结果
    /*
    id          Name       
    ----------- ---------- 
    2           B
    3           C
    4           D(所影响的行数为 3 行)
    */
      

  3.   

    select * from table where abs(id - @id) <= 1
      

  4.   

    回zlp321002:谢谢兄弟烦心,但是表里面的记录并不一定都是连续的,中间很可能由于删除数据造成不连续,那么你这个方法就有局限性了,我以前也想到过这个方法的
      

  5.   

    但是表里面的记录并不一定都是连续的
    ---select idrow=identity(int,1,1),* into #tmp from tableselect * from #tmp where abs(idrow - @id) <= 1drop table #tmp
      

  6.   

    回happyflystone(仙林幽谷客):方法很巧妙,但是问题也同zlp321002的,就是id虽然是主键但是并不一定连续,如果连续你的方法就可以,不连续就不行了
      

  7.   

    回happyflystone(仙林幽谷客):方法很巧妙,但是问题也同zlp321002的,就是id虽然是主键但是并不一定连续,如果连续你的方法就可以,不连续就不行了
    ----select idrow=identity(int,1,1),* into #tmp from table ----自己生成连续的IDselect * from #tmp where abs(idrow - @id) <= 1drop table #tmp
      

  8.   

    回happyflystone(仙林幽谷客):
    出现如下问题
    无法使用 SELECT INTO 语句向表 '#tmp' 中添加标识列,该表中已有继承了标识属性的列 'ID'。
    第一条语句中声名了一个主键idrow,但是我原来表里面也有主键的,这样我能明白你的方法的原理,但是要改进,我想想
      

  9.   

    回happyflystone(仙林幽谷客):
    出现如下问题
    无法使用 SELECT INTO 语句向表 '#tmp' 中添加标识列,该表中已有继承了标识属性的列 'ID'。
    第一条语句中声名了一个主键idrow,但是我原来表里面也有主键的,这样我能明白你的方法的原理,但是要改进,我想想
    ----------------------
    在select 中不要包括你的自增列
      

  10.   

    方法笨一点select * from tabe where id=@id
    union (select top 1 * from table where id<@id order by id desc)
    untion (select top 1 * from table where id>@id order by id)
    order by id
      

  11.   

    而且用临时表的话如果这个查询使用次数一多那么数据库日志的大小就敖敖大了^_^
    ----------select top 2 * from (select * from table where id <= @id order by id desc) b
    union
    select top 1 * from (select * from table where id >@id order by id asc) b
      

  12.   

    而且用临时表的话如果这个查询使用次数一多那么数据库日志的大小就敖敖大了^_^
    ----------select top 2 * from table where id <= @id order by id desc
    union
    select top 1 * from  table where id >@id order by id asc
      

  13.   

    回happyflystone(仙林幽谷客):
    出现如下问题
    无法使用 SELECT INTO 语句向表 '#tmp' 中添加标识列,该表中已有继承了标识属性的列 'ID'。
    第一条语句中声名了一个主键idrow,但是我原来表里面也有主键的,这样我能明白你的方法的原理,但是要改进,我想想
    ----------------------
    在select 中不要包括你的自增列
    兄弟,不好意思,我要的就是自增列的值
      

  14.   

    嗯,我的问题解决了,虽然不是直接用各位仁兄介绍的方法的,但是你们的思想给我了启发,谢谢happyflystone(仙林幽谷客),NewPeople(新新人类)
      

  15.   

    先select出来,放到rs中,再利用rs.MoveNext、rs.MovePrevious、rs. MoveFirst、
    rs. MoveLast控制指针