gpt4 book ai didi

sql - 我可以在不使用 ROW_NUM () OVER (ORDER BY xxxxx) 的情况下对 Sql Server 中的查询进行分页吗?

转载 作者:行者123 更新时间:2023-12-02 00:26:48 25 4
gpt4 key购买 nike

我正在处理自定义 DAL,现在正在处理自动结果分页。 DAL 根据我们的模型生成动态查询,例如:

Model.All() --> generates "select * from mytable"
Model.Filter ("d=@0", "arg0value") --> generates "select * from mytable where d=@0"
...

我不想向我们的过滤器函数添加额外的参数,也不想为分页添加专门的函数(当然,如果可以避免的话)。相反,我想在执行查询之前对更改查询的结果进行分页。。像...

var resultset = Model.Filter ("d=@0, "arg0value"); // "select * from mytable where d=@0"
resulset = resultset.Paginate (1, 25); // this should paginate the query before loading any objects

在 Oracle 中很容易,使用 ROWNUM 伪列并包装旧查询。

select * from (my old sql) where rownum between 20 and 40

在 Sql Server (2005) 中,没有任何类似 ROWNUM 的东西。我看到有 ROW_NUMBER 函数,但它需要了解查询的内部结构,因为您需要传递一个“OVER (ORDER BY xxxx)”子句。

select row_number() over (order By <?????>) as rownum, dv.* from (my old sql) as dv where rownum between 20 and 40

那么,有没有办法在不向我们的模型添加特定参数/函数的情况下在 Sql Server 中执行此操作?

谢谢!

编辑

正如@Dems 所说,我可以解析查询并根据输出字段添加 ORDER BY,但是:首先,我不想要解析的开销,其次,如果查询的类型为“select * ",我无法提取字段。

最佳答案

如果您正在编写自己的数据访问层,并且您只想应用 ROW_NUMBER() 知道查询的输出字段名称(而不是它的内部名称)...

SELECT
*
FROM
(
SELECT
ROW_NUMBER() OVER (ORDER BY field1, field2, field3) AS row_id,
*
FROM
(
<your-query>
)
AS unordered_data
)
AS ordered_data
WHERE
row_id BETWEEN x AND y

关于sql - 我可以在不使用 ROW_NUM () OVER (ORDER BY xxxxx) 的情况下对 Sql Server 中的查询进行分页吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8588251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com