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

时间:2021-10-18 00:23:33
设本记录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类型后组合到一起。
========================

要求不简单,当然就没有更简单的了,其实这语句不算很长,逻辑也不是很复杂