【发布时间】:2021-02-19 04:52:47
【问题描述】:
我正在尝试向数据库发送查询字符串,但收到此错误 -->
TOP 不能作为 OFFSET 在同一个查询或子查询中使用。
当我调试查询字符串时,我发现
"select * from TABLE" 更改为 "select * from TABLE Fetch Next 50 Rows Only"(其中列数 =50(已设置))。
所需输出
select top * x from [TABLE]
到
select * from [TABLE] Fetch Next x Rows Only
我尝试了什么
我尝试使用,查找并将'top * x'替换为整数x和*
string CommandText = "select * from TABLE";
CommandText =CommandText
+ orderby + " OFFSET " + (request.Page - 1) * request.PageSize
+ " ROWS FETCH NEXT " + request.PageSize + " ROWS ONLY";
请帮助我找到解决方案。
【问题讨论】:
-
我不清楚您要做什么。首先,以这种方式构建 SQL 查询是危险的,可能会导致 SQL 注入。其次,我相信 FETCH 关键字只适用于游标,因此在这种情况下它不起作用。请说明您要完成的工作,我可能会提供帮助。
-
为什么要在已经检索到所需行数的 SQL 语句上添加
TOP? -
@BrandonJohnson 在 SQL Server 中,在 SELECT 语句中使用 FETCH 是有效的
-
您应该绝对不要从外部源运行任意 SQL。绝不。这是一个安全漏洞,你可以开着卡车穿过。
-
@Cleptus 参数化查询不能解决问题。如果这个页面是面向用户的,精明的用户会注意到 SQL 并意识到他们可以编写任何他们想要的 SQL。然后你就有了一个安全漏洞。