2011-04-20 54 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

相關問題