2011-02-22 4 views
2

CakePHP는 일반 SQL이 아닌 MySQL 구문 인 "LIMIT X"로 끝나는 모든 쿼리를 구성하며 Microsoft SQL Server는이를 허용하지 않습니다. 제공MSSQL과 함께 CakePHP에서 LIMIT 키워드 대신 TOP를 어떻게 사용합니까?

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'. 

당신이 원하는 때문에 : 당신은 ODBC 드라이버를 사용하는 경우에도이 같은 쿼리를 생성 할 수 있습니다

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

온 걸리는 코드 "LIMIT"는 DB 관련 파일 중 하나가 아닌 dbo_source.php에 있습니다 (함수 제한 ($ limit, $ offset = null)이라고 생각합니다).

LIMIT 대신 TOP 구문으로 전환하려면 일부 설정을 전환 할 수 있습니까?

+0

나는 스톱그 갭으로 무엇을하고있는 것은 "dbo_odbc에서"function limit ($ limit, $ offset = null) {return null;} "을 다시 선언했음을 나타냅니다. php 그러나 이것은 추악한 성능이 될 것이고 model-> find ("first")는 더 이상 제대로 작동하지 않을 것입니다. – Dave

답변

1

Google 캐시 버전의 오래된 CakePHP 문제 티켓에서 발견 한 해상도는 "MSSQL dbo 사용"이었습니다.

그래서해야 할 일은 CakePHP가 MSSql 드라이버를 사용하도록 구성하는 것이며 "TOP"구문을 사용하기 시작할 것입니다. 여기에 그 일을하는 방법에 대해 이야기하는 블로그 게시물이 있습니다 : http://www.johnmckinzie.com/2007/06/29/sql-server-2005-and-cakephp/

+0

그것은 내가 끝내었던 것에 꽤 가깝다. 기본적으로 MSSQL 드라이버에서 함수를 가져 와서 ODBC와 병합합니다. 100 % 호환이 될지 의심 스럽지만 모든 쿼리에서 작동합니다. – Dave

관련 문제