我正试图向数据库发送一个查询字符串,但收到了此错误-->
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
的未来查询将执行得更快,因为该计划不考虑参数中的不同值。