SQL 问题:已知主键id 和排序条件 这条记录的上一条或下一条记录

设本记录ID为@ID

则上条记录为:
SELECT TOP 1 * FROM TABLE1 WHERE 排序字段<(select
排序字段 from table1 where id=@id) order by 排序字段 desc
下条记录为:
SELECT TOP 1 *
FROM TABLE1 WHERE 排序字段>(select 排序字段 from table1 where id=@id) order by 排序字段

==========================
不使用记录集是什么意思?是结果不要结果集,而要赋值给变量吗?

有了单条记录的记录集,您还不会将它存入变量吗?格式是这样:
则上条记录为:
set @idpre=(
SELECT TOP 1
id FROM TABLE1 WHERE 排序字段<(select 排序字段 from table1 where id=@id) order by
排序字段 desc
)
下条记录的ID为:
set @idpre=(
SELECT TOP 1 id FROM TABLE1
WHERE 排序字段>(select 排序字段 from table1 where id=@id) order by 排序字段
)

=======================
问得好!
设排序字段依次为:FIELD1 INT,FIELD2
VARCHAR(30)FIELD3 DATETIME
set @idpre=(
SELECT TOP 1 id FROM TABLE1

WHERE
(convert(varchar(10000000000+field1))+space(30-len(field2))+field2,convert(varchar,field3,120))

>
(select
排序字段=(convert(varchar(10000000000+field1))+space(30-len(field2))+field2,convert(varchar,field3,120))

from table1 where id=@id)
order by 排序字段

--关键是将排序的所有字段转换为定长的VARCHAR类型后组合到一起。
========================

要求不简单,当然就没有更简单的了,其实这语句不算很长,逻辑也不是很复杂
posted @ 2012-03-03 08:35  scgw  阅读(501)  评论(0编辑  收藏  举报