【发布时间】:2019-10-13 20:37:32
【问题描述】:
这可能是一个很大的帮助,但需要一些帮助来尝试使用 VB.NET 从访问数据库中获取某些数据集。我找到了一篇很棒的文章,问题基本上是我想要的,但是不幸的是,给出的解决方案不适用于访问。
请看这里的主题: https://dba.stackexchange.com/questions/36943/find-n-consecutive-free-numbers-from-table
对我有用且完美的代码在这里: http://sqlfiddle.com/#!1/a2633/2
理想情况下,我应该有一个适当的 SQL 数据库,但不幸的是我被 MS Access 卡住了,而且我知道它不接受 ROW_NUMBER 或 PARTITION BY ...我怎么知道?我已经尝试并用谷歌搜索了:~)
基本上我在数据库中有一个数字列表,如下所示:
SELECT TOP 5
[ID], [UIDNo]
FROM
[tblUIDS]
WHERE
[Requester] IS NULL
ORDER BY
ID
5 是一个变量,用户说我想要 x 数量,因此 SQL 语句返回 UIDNos 的最高数量,这是大的,然后它向请求者执行 INSERT 语句。但是 id 喜欢它能够返回 5 个连续的 UIDNo。
因此基于上图,如果用户想要 2 个 UIDNo,它将返回 00004 和 00005,而不是只返回 00001 和 00004。如果用户想要 6 个 UIDNo,它将返回 00032-00037 等等。
使用 VB.NET 甚至允许我像这样查询 MS Access 数据库吗?如果以另一种方式更容易,我也愿意接受建议......
提前致谢
【问题讨论】:
-
序列号不够怎么办? TOP 1000000?应该返回什么?
-
变量有 3000 的限制,但如果没有可用的变量,则什么也不返回。用户可以随时降低他们的请求,直到他们找到一些
-
我很困惑。您是说要返回不在表格中的
UIDnos 吗?这似乎很奇怪。 -
@SpyingSphinx 。 . .我得到它。我建议使用除 MS Access 之外的任何数据库。
-
这是一个例子,其中简单地循环一次记录将比难以理解的 SQL 更快、更简单。 对于每条记录如果下一个UIDNo是连续的,则加一并存储ID;如果不是,则将计数器重置为 1 和存储的 ID 并继续。当计数达到所需数量时,退出循环,您将获得序列的存储 ID。对于存储,请使用适合您的目的:DataTable、List、Array、Dictionary 等。