【问题标题】:"Invalid usage of the option NEXT in the FETCH statement."“FETCH 语句中选项 NEXT 的使用无效。”
【发布时间】:2017-08-25 17:10:57
【问题描述】:

我不是 SQL 大师,所以我希望这不是什么大问题。 :) 这是我的 SQL:

query = "SELECT id, email, firstName, lastName " +
        "FROM [WarehouseUser] " +
        "WHERE email LIKE '%' + @Filter + '%' OR FirstName LIKE '%' + @Filter + '%' OR LastName LIKE '%' + @Filter + '%'" +
        "ORDER BY " + "DESC" +
        "OFFSET @Offset ROWS " +
        "FETCH NEXT @Length ROWS ONLY;";

执行此操作时,我收到以下错误:

System.Data.SqlClient.SqlException: '@Offset' 附近的语法不正确。 FETCH 语句中选项 NEXT 的使用无效。'

我做错了什么?

【问题讨论】:

  • (1) 您使用的是什么数据库?请适当标记。 (2) 变量替换后的查询是什么样的?
  • sort 包含什么?在某处打印最终的 sql 渲染字符串,尝试直接运行它,看看问题出在哪里......我认为必须在 sort 或偏移量、长度的数字上(并且在订单之前你没有任何空间。
  • 它可能是+"sort 之后搞砸了
  • 如果sort 为空,这正是出现的语法错误。由此我初步推断sort是空的。
  • 那是因为ORDER BY DESC 也无效。您的ORDER BY (ORDER BY WidgetCount DESC) 缺少一列。构建动态 SQL 时,在执行前打印出来,然后使用 SSMS 或 Visual Studio 的服务器特性来查看语句在语法上是否合法。运气好的话,你会立即得到波浪线告诉你它不是。 (此外,当您动态组合语句时,强烈建议您具备 SQL 的基本工作知识——您至少应该知道 ORDER BY 的工作原理。)

标签: c# sql sqlexception


【解决方案1】:

当您输出变量的值并查看它写入的 SQL 查询时,您会发现问题。这里"DESC" 后面需要一个空格。喜欢"DESC "。您目前拥有DESCOFFSET 而不是DESC OFFSET。看这里:

http://rextester.com/live/RKRXM8567

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2022-01-19
    • 2012-01-23
    • 1970-01-01
    • 2020-08-07
    • 2016-03-30
    相关资源
    最近更新 更多