Результат разбиения на страницы Yii с использованием CSqlDataProvider

Я использую разбиение на страницы с помощью CSqlDataProvider. Результат отображается правильно для первой 20 или первой страницы разбивки на страницы. Когда я вижу сообщение «Журнал» на веб-странице, запрос, который он использует, фактически выбирает 20 верхних строк для всех страниц, и это проблема. Я понятия не имею, как исправить это.

Мой контроллер имеет код:

public function actionLink() { $sql = "SELECT Ordernumber, Order_Date FROM [Orders] WHERE CAST(Order_Date As Date) BETWEEN '01-01-2014' AND '31-01-2014'"; $count = Yii::app()->db->createCommand('SELECT COUNT(*) FROM (' . $sql . ') as count_alias')->queryScalar(); $dataProvider = new CSqlDataProvider($sql, array('keyField' => 'Order_Date', 'totalItemCount' => $count, 'pagination' => array( 'pageSize' => 20,),)); $this->render('link', array('dataProvider' => $dataProvider)); }} 

И теперь запрос, который он использует для подсчета, верен (сообщение журнала):

Запрос SQL:

 SELECT COUNT(*) FROM (SELECT Ordernumber ,Order_Date FROM [Orders] WHERE CAST(Order_Date As Date) BETWEEN '01-01-2014' AND '31-01-2014') as count_alias 

Запрос, который он использует для страницы 2 (сообщение журнала):

  SELECT * FROM (SELECT TOP 20 * FROM (SELECT TOP 40 Ordernumber,Order_Date FROM [Orders] WHERE CAST(Order_Date As Date) BETWEEN '01-01-2014' AND '31-01-2014') as [__inner__]) as [__outer__] 

Вышеуказанный запрос фактически даст результат в виде первых 20 строк. Его та же проблема с каждой страницей. Он дает каждый результат как одни и те же первые 20 строк. Итак, становится (сообщение журнала):

  SELECT * FROM (SELECT TOP 20 * FROM (SELECT TOP 60 Ordernumber,Order_Date FROM [Orders] WHERE CAST(Order_Date As Date) BETWEEN '01-01-2014' AND '31-01-2014') as [__inner__] ) as [__outer__] 

Единственная проблема, которую я вижу, – это запрос, который он использует для извлечения данных для страницы 2,3 .. и так далее. Для каждой страницы он возвращает одни и те же данные, потому что каждый раз, когда он выбирает TOP 20 строк. Я не понимаю причины такого поведения. Как выглядит запрос, когда вы используете SQL SERVER как DB и CSqlDataProvider качестве поставщика данных во время разбивки на страницы?