我有一个困难(如果不是不可能)的问题要求解决方案 . 我有一个Oracle查询,我必须将其翻译为T-SQL语法 .
查询在Oracle中如下所示:
__select_wrapper=select * from(
select rownum row_num, inner__c3p__query.*
from ({0}) inner__c3p__query)
where row_num>@offset and (row_num<=(@offset+@count) or (@count<1))
这来自属性文件 . 基本上,这一行执行任何SQL查询,命名结果集“inner__c3p__query”,并从中选择所有内容以及rownum . 然后,它通过rownum过滤结果:> @offset和<= @ offset @count . 因此,实际上,它执行任何SQL查询,并返回有限的行集,例如从第10行到第20行 .
现在,我的工作是将其转换为T-SQL . 我花了一天半时间查找每个可能的想法,但到目前为止,我还没有使用 ROW_NUMBER()
函数,因为它在 OVER()
子句中至少需要一个列,我不能提供任何一个,因为实际的查询是仅在运行时确定 .
你们有任何想法,或者在DB方面真的不可能做到吗?
提前致谢!
加布
2 回答
虽然我对这种方法有很多保留意见,特别是对于SQL注入攻击,但以下情况应该有效:
不幸的是,由于排序列永远不会更改,如果您尝试将其用于分页,则无法保证在重复执行中始终将相同的row_num分配给同一行 .
ROW_NUMBER()只需要ORDER BY部分中的一列(否则你如何订购?)
如果原始是随机顺序,那么只需在查询中选择一个随机列(如第一个 . )在ORDER BY中,您可以使用列号...只需使用第一列或第一列 .