2011-04-20 53 views
0

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

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) 

回答

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

相关问题