我继承了一个已删除记录的数据库。我正在制作新闻报道表。这意味着删除了这些记录的某些缺失ID。 您可以在存档(1000年代)中打开任何新闻报道,然后使用下一个和上一个按钮浏览所有新闻报道。目前,如果您导航到已删除的下一条记录,则会抛出记录集文件结尾,并显示一条默认消息“新闻项不再可用”。 有没有办法检测这个丢失的记录,并转移到下一个有效的新闻故事(ID等)?我在这个网站上使用旧的asp,有没有办法在浏览记录集时检测到这个或者这种类型的功能必须来自数据库,可能是一个触发器?谢谢你的帮助。
答案 0 :(得分:3)
SELECT TOP 1 *
FROM news
WHERE id >= @next_id
ORDER BY
id
答案 1 :(得分:1)
对于SQL Server 2005及更高版本,请参阅MSDN。
您可以使用row_number
创建连续的数字列。
答案 2 :(得分:0)
1)因为你知道它会影响前端(你的'记录集文件末尾')当然你可以手动递增/递减标识符并尝试从DB中获取另一条记录,这似乎是你能做的最好的不进入数据库。但如果连续多个记录丢失,这可能会非常无效。我建议改变数据库中的代码。
假设您有这样的查询:
SELECT * FROM News WHERE Id=@Id
其中@Id是您尝试获取的标识符。相反,你会有这样的东西:
SELECT * FROM News WHERE Id=(SELECT MIN(Id) FROM News WHERE Id>=@Id)
这将允许您选择第一个可用记录。你应该使用MAX而不是MIN和< =而不是> =如果你要查找“上一个”新闻项目,上面的例子应该适用于下一个新闻项目。
另外请不要忘记,使用此方法,您必须根据从数据库中获取的值而不是您要查找的值来递增/递减下一个/上一个记录的标识符。示例:SQL表中包含以下标识符 - 1,5,12,21。您已打开Id = 1的新闻项目。 “下一步”按钮将开始查找Id> = 2并返回Id = 5的记录。当你打开它时,你的'下一步'按钮应该找到Id> = 6(不是2)的记录。
接下来的一点是,您不仅要提供您尝试获取的记录的标识符,还要提供查找方向。此参数也应该在http查询字符串中传递。
此方法也可能不是非常用户友好,因为所有包含以下网址的网页都会显示相同的项目:
站点/ news.asp ID = 2&安培;方向=下一个
站点/ news.asp ID = 3&安培;方向=下一个
站点/ news.asp ID = 4&安培;方向=下一个
site / news.asp?Id = 5& direction = next
2)因此,当您显示当前记录时,确定哪个记录将是下一个和之前的记录可能会更加用户友好。在这种情况下,您将必须执行以下查询:
SELECT (SELECT MAX(Id) FROM News WHERE Id<@Id) as previousId, (SELECT MIN(Id) FROM News WHERE Id>@Id) as nextId
然后相应地更新您的“下一个”和“上一个”按钮的网址。因此,如果在前面的示例中我们将打开Id = 5的新闻项,则“上一个”按钮将直接导航到Id = 1,“下一个”按钮将导航到Id = 12。
我认为第二种方法在您的情况下甚至更好,因为它可以通过较少的更改实现,并且还允许您实现灰显“下一个”和“上一个”链接,如果相应的记录不可用(您将知道这一点)通过查询previousId或nextId返回NULL。
希望这会有所帮助:)