作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在处理自定义 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/
我是一名优秀的程序员,十分优秀!