【问题标题】:Incorrect syntax near 'LIMIT' [duplicate]'LIMIT'附近的语法不正确[重复]
【发布时间】:2016-03-21 03:40:42
【问题描述】:

您好,我有一条 SQL 语句需要限制,但语法不正确!

$strSQL = 'SELECT * FROM BlogItem WHERE Blog_Live=1 LIMIT '.$rowsperpage.' OFFSET '.$offset.''; $objQuery = mssql_query($strSQL)
or die ("Error Query [".$strSQL."]");

谁能给我一些建议?

编辑:

我使用的是 SQL Server 2008

试过这个:

$strSQL = "SELECT * FROM BlogItem WHERE Blog_Live=1 AND RowNum >= ".$offset." AND RowNum < ".$offset." + ".$rowsperpage."";

【问题讨论】:

  • 您确定您使用的是 SQL Server 吗?因为那是您在那里使用的 MySQL 语法。如果是 SQL Server,这是一个重复的问题,希望您可以使用我标记的重复的答案之一中提到的较新的 OFFSETFETCH....
  • 变量$rowsperpage$offset的值是多少?
  • 试试这个。 $strSQL = "SELECT * FROM BlogItem WHERE Blog_Live=1 LIMIT $rowsperpage OFFSET $offset"; $objQuery = mssql_query($strSQL) or die ("Error Query [".$strSQL."]");
  • 嗨,马特,我已经阅读了副本,但仍然不确定如何格式化我的 SQL 查询,我使用的是 SQL Server 2008!任何建议表示赞赏!
  • 我相信 OFFSETFETCH 仅在 SQL Server 2012 及更高版本中可用,因此您必须使用使用 ROW_NUMBER() 的更复杂的旧语法之一,就像在那个重复的问题。我会说你应该尝试这样做,如果你有问题,就你遇到的问题的细节提出一个新的问题。

标签: php sql sql-server


【解决方案1】:

你试过这样

SELECT * FROM <table>
    ORDER BY <columns>
    OFFSET <EXPR1> ROWS
    FETCH NEXT <EXPR2> ROWS ONLY

例子:

SELECT * FROM t_book AS P
    ORDER BY P.barcode
    OFFSET 10 ROWS
    FETCH NEXT 20 ROWS ONLY

;WITH Results_CTE AS
(
    SELECT
        Col1, Col2, ...,
        ROW_NUMBER() OVER (ORDER BY SortCol1, SortCol2, ...) AS RowNum
    FROM Table
    WHERE <whatever>
)
SELECT *
FROM Results_CTE
WHERE RowNum >= @Offset
AND RowNum < @Offset + @Limit`

【讨论】:

    猜你喜欢
    • 2019-12-30
    • 1970-01-01
    • 2020-01-14
    • 2019-03-08
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多