1

我正在尝试使用 PDO SQLSRV 从具有限制(TOP)的表中选择数据。但是,当我这样做时。

$limit = 20;

$sql = "SELECT TOP :rowsLimit * FROM TABLE ORDER BY id DESC";
$query = $this->db->prepare($sql);
$parameters = array(':rowsLimit' => $limit);

$query->execute($parameters);

我收到这样的错误。

Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 102 [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near '@P1'.

我什至尝试删除参数并添加一个 bindValue ,但即使使用其中任何一个也会出现相同的错误。

$query->bindValue(':rowsLimit', (int) trim($limit), PDO::PARAM_INT);

或者

$query->bindValue(':rowsLimit', intval(trim($limit)), PDO::PARAM_INT);

那么如何在 PDO SQLSRV 中为 TOP 绑定参数呢?

4

1 回答 1

3

您不能对TOP值使用参数,但有一个解决该问题的方法。

您需要做的是使用ROW_NUMBER() OVER()语法并手动过滤掉最上面的@x行。

有关示例,请参见 sqlfiddle

于 2015-07-18T11:31:20.700 回答