Драйверы Microsoft для PHP для SQL Server, похоже, не поддерживают определение запроса CTE - PullRequest
0 голосов
/ 20 апреля 2011

Я пытаюсь использовать оператор 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 голосов
/ 01 декабря 2011

Согласно WITH common_table_expression (Transact-SQL) , ORDER BY НЕ может использоваться в CTE_query_definition. Поскольку порядок не может быть гарантирован в CTE_query_definition ORDER BY.

Следующие пункты не могут использоваться в CTE_query_definition:

ВЫЧИСЛИТЬ или ВЫЧИСИТЬ ПО

ORDER BY (кроме случаев, когда указано предложение TOP)

INTO

Предложение OPTION с подсказками запроса

ДЛЯ XML

ДЛЯ ПРОСМОТРА

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...