用于SQL Server的PHP的Microsoft驱动程序似乎不支持CTE查询定义

时间:2011-04-20 15:56:54

标签: php visual-studio-2005

我正在尝试在查询中使用WITH语句,但结果始终是一个空数组。这是否意味着驱动程序实际上阻止我们使用CTE查询定义,即使我们使用的是SQL-Server 2005或更高版本?我没有任何错误,根本没有。

WITH CarsTemp AS
(
   SELECT *, ROW_NUMBER() OVER (ORDER BY Model) AS Row
   FROM Cars
)

SELECT * 
FROM CarsTemp 
WHERE Row BETWEEN 1 AND 10 

但是,如果我使用常见的嵌入语法,它可以正常工作。

SELECT * FROM
(
   SELECT *, ROW_NUMBER() OVER (ORDER BY Model) AS Row
   FROM Cars
) AS CarsTemp 
WHERE Row BETWEEN 1 AND 10

有人可以帮我吗?为什么会这样?

我的查询如下:

sqlsrv_query($this->mssql, $query, $sqlParams, array( "Scrollable" => SQLSRV_CURSOR_KEYSET )

1 个答案:

答案 0 :(得分:0)

根据WITH common_table_expression (Transact-SQL),ORDER BY不能用于CTE_query_definition。由于ORDER BY在CTE_query_definition中无法保证订单。

  

以下条款不能用于CTE_query_definition:

     

COMPUTE或COMPUTE BY

     

ORDER BY(指定TOP子句时除外)

     

INTO

     带有查询提示的

OPTION子句

     

FOR XML

     

FOR BROWSE