将 sybase ASE 中的结果限制在特定范围之间
limiting results in sybase ASE between a particular range
我有一个搜索屏幕,它允许用户搜索信息并填充一个网格。一些搜索结果 return 包含大量数据。我正在尝试创建一个分页网格,这样我一次只能从存储过程中获取 10 或 20 个结果。 (我已经在 UI 中设置了分页网格)
我正在尝试做这样的事情:
select * from wl_eval limit 1, 20
上面的查询将 return 仅前 20 条记录。我怎样才能在 Sybase ASE 中完成它?不幸的是,对于我的客户项目,我们使用的是 Sybase。我知道在其他数据库引擎中我们可以使用我上面提到的查询。我也知道我们可以使用 SET ROW COUNT 20
但如果我想要一个特定的范围,比如从 30 到 50,这将不起作用。
有什么想法吗?
添加您想要的 TOP 记录数 return
DECLARE @intStartRow int;
DECLARE @intEndRow int;
SET @intStartRow = (@intPage -1) * @intPageSize + 1;
SET @intEndRow = @intPage * @intPageSize;
WITH wl_eval AS
(SELECT field,
ROW_NUMBER() OVER(ORDER BY intID DESC) as intRow,
COUNT(intID) OVER() AS intTotalHits
FROM tblBlog)
SELECT field, intTotalHits FROM wl
WHERE intRow BETWEEN @intStartRow AND @intEndRow
SELECT TOP 20 <column list>
FROM YourTable
ORDER BY <list>
我有一个搜索屏幕,它允许用户搜索信息并填充一个网格。一些搜索结果 return 包含大量数据。我正在尝试创建一个分页网格,这样我一次只能从存储过程中获取 10 或 20 个结果。 (我已经在 UI 中设置了分页网格)
我正在尝试做这样的事情:
select * from wl_eval limit 1, 20
上面的查询将 return 仅前 20 条记录。我怎样才能在 Sybase ASE 中完成它?不幸的是,对于我的客户项目,我们使用的是 Sybase。我知道在其他数据库引擎中我们可以使用我上面提到的查询。我也知道我们可以使用 SET ROW COUNT 20
但如果我想要一个特定的范围,比如从 30 到 50,这将不起作用。
有什么想法吗?
添加您想要的 TOP 记录数 return
DECLARE @intStartRow int;
DECLARE @intEndRow int;
SET @intStartRow = (@intPage -1) * @intPageSize + 1;
SET @intEndRow = @intPage * @intPageSize;
WITH wl_eval AS
(SELECT field,
ROW_NUMBER() OVER(ORDER BY intID DESC) as intRow,
COUNT(intID) OVER() AS intTotalHits
FROM tblBlog)
SELECT field, intTotalHits FROM wl
WHERE intRow BETWEEN @intStartRow AND @intEndRow
SELECT TOP 20 <column list>
FROM YourTable
ORDER BY <list>