如何将选择顶部 * x" 与查询字符串分开?



我正试图向数据库发送一个查询字符串,但收到了此错误-->

TOP不能在与OFFSET相同的查询或子查询中使用。

当我调试查询字符串时,我发现将CCD_ 1改变为CCD_ 2(其中列数=50(已设置((。

所需输出

select top * x from [TABLE]

select * from [TABLE] Fetch Next x Rows Only

我尝试了什么

我尝试使用、查找并将"顶部*x"替换为整数x和*

string CommandText = "select * from TABLE";
CommandText =CommandText
+ orderby + " OFFSET " + (request.Page - 1) * request.PageSize
+ " ROWS FETCH NEXT " + request.PageSize + " ROWS ONLY";

请帮我找到解决办法。

为了避免字符串串联以生成SQL语句,您可以(和IMHO您应该(使用参数化查询。这是一种称为SQL注入的安全风险,您应该始终避免。例如:

string commandText = @"
SELECT * FROM dbo.TABLE
ORDER BY orderColum
OFFSET @offset ROWS
FETCH NEXT @page ROWS ONLY";
command.CommandText = commandText;
command.Parameters.Add(SqlDbType.Int, "@offset").Value =  (request.Page - 1) * request.PageSize;
command.Parameters.Add(SqlDbType.Int, "@page").Value =  request.PageSize;

请注意,参数化查询确实有好处,数据库引擎可能会为其制定执行计划,使用相同CommandText的未来查询将执行得更快,因为该计划不考虑参数中的不同值。

最新更新