Как использовать TOP вместо ключевого слова LIMIT в CakePHP с MSSQL? - PullRequest
2 голосов
/ 22 февраля 2011

CakePHP создает все свои запросы, заканчивающиеся на «LIMIT X», который является синтаксисом MySQL, а не простым SQL, и Microsoft SQL Server не примет его.Даже если вы используете драйвер ODBC, он будет генерировать запросы вроде:

SELECT "Content"."id" AS "Content_dot_id", 
"Content"."name" AS "Content_dot_name" 
FROM "contents" AS "Content"  WHERE (1=1) LIMIT 1

, что дает:

37000: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'LIMIT'.

Поскольку вы хотите:

SELECT TOP 1 "Content"."id" AS "Content_dot_id", 
"Content"."name" AS "Content_dot_name"
FROM "contents" AS "Content"  WHERE (1=1) 

Код, который принимает «LIMIT», находится в dbo_source.php, а не в одном из файлов, специфичных для БД (я думаю, что это предел функции ($ limit, $ offset = null)).

Есть ли некоторые настройкиЯ могу переключиться, чтобы переключиться на синтаксис TOP вместо LIMIT?

1 Ответ

1 голос
/ 23 февраля 2011

Разрешение, которое я нашел в кэшированной версии Google старого билета о неполадках CakePHP, было «Использовать MSSQL dbo».

Итак, вам нужно настроить CakePHP на использование драйвера MSSql, и он начнет использовать синтаксис «TOP». Вот сообщение в блоге о том, как это сделать: http://www.johnmckinzie.com/2007/06/29/sql-server-2005-and-cakephp/

...