使用存储过程获取上一行id

时间:2011-05-17 12:14:53

标签: sql sql-server-2005

我的要求是这样的:

我必须从表“A”中获取一行。现在我必须遍历所有行并从ID列获取值。如果我得到ID = 5,那么我想执行一些存储过程,通过该过程我从某个表“B”获取前一个id行。喜欢

select * from table b where ID = 4

购买我的问题是:如果有人从数据库中删除了该行(例如,某些用户删除了ID为3和4的行) - 那么如何从数据库中获取id = 2的行?

请给我一些sql存储过程以从表中获取以前的id记录。

3 个答案:

答案 0 :(得分:4)

很难准确理解你在寻找什么 - 这样的事情可能吗??

CREATE PROCEDURE dbo.FetchPreviousRow @ID INT
AS BEGIN

   SELECT TOP 1 ID, (other columns.....)
   FROM dbo.TableB
   WHERE ID < @ID
   ORDER BY ID DESC

END

这将选择ID 小于您传入的@ID的行,所以:

EXEC dbo.FetchPreviousRow @ID = 5

将返回ID = 4行 - 如果存在的话。否则,它将返回ID = 3行 - 如果存在。否则行ID = 2 - 等等......

答案 1 :(得分:2)

以下查询应该为您提供:

select max(ID) from YourTable where ID < @YourID

@YourID是包含您最近插入的ID的变量

答案 2 :(得分:1)

如何选择小于5的所有ID并按ID排序。然后第一个结果就是你想要的结果。