【问题标题】:Where clause with fetch next row带有获取下一行的 Where 子句
【发布时间】:2016-02-03 12:05:22
【问题描述】:

如何在 sql 查询中使用 where 子句和 fetch next。我的查询结束于:

 10 ROWS FETCH NEXT 5 ROWS ONLY WHERE table.FullName LIKE '%name%' 

在 where 子句中出现错误。

error message

关键字“WHERE”附近的语法不正确

编辑:

select * 
from table name  
WHERE FullName LIKE '%name%' 
ORDER BY FullName 
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY

当我删除语句'OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY'时查询将起作用

【问题讨论】:

  • 关键字“WHERE”附近的语法不正确。这是错误
  • select * from table name WHERE FullName LIKE '%name%' ORDER BY FullName OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY

标签: sql sql-server codeigniter


【解决方案1】:

您可能有错误的子句顺序,您需要先对结果进行排序以获得稳定的结果集:

SELECT *
FROM ...
WHERE table.FullName LIKE '%name%'
ORDER BY ...
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY

LiveDemo

请记住,%phrase%非 SARGable 并且查询对于大表的性能很差。

OFFSET FETCH 仅适用于 SQL Server 2012+

【讨论】:

  • 我试过这个得到错误,比如在 FETCH 语句中使用了选项 NEXT 无效。实际上正在获取 5 行,但我的搜索结果只有一个值。
  • @Youv SQL Server 版本?
  • 如果搜索结果 (no:of records) 小于 5,查询是否有效?
  • @Youv Run select @@Version
  • 我在 ssms 2014 中使用这个偏移量获取。它对我来说工作正常,但是当我使用这个 where 子句像 '%gg%' 时,事情不工作
【解决方案2】:

您不能对 SELECT * 执行聚合函数,您必须在 SELECT 子句中指定列的名称或在 WHERE 子句 table_name.shemaname.columnname 中指定完全限定名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多