gpt4 book ai didi

sql-server - Oracle 到 SQL Server : dynamic query with limited rowset returned

转载 作者:搜寻专家 更新时间:2023-10-30 22:10:10 24 4
gpt4 key购买 nike

我有一个困难的(如果不是不可能的话)问题需要解决。我有一个 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() 子句中的一列,而我无法提供,因为实际查询仅在运行时确定。

你们有什么想法,或者在数据库方面真的不可能吗?

提前致谢!

加布

最佳答案

虽然我对这种方法持保留意见,尤其是针对 SQL 注入(inject)攻击,但以下方法应该有效:

select * from(
select ROW_NUMBER() OVER(ORDER BY (Select NULL)) row_num,
inner__c3p__query.*
from ({0}) inner__c3p__query)
where row_num>@offset and (row_num<=(@offset+@count) or (@count<1))

不幸的是,由于排序列永远不会改变,如果您尝试使用它进行分页,则无法保证在重复执行中始终将相同的 row_num 分配给同一行。

关于sql-server - Oracle 到 SQL Server : dynamic query with limited rowset returned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32785908/

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