-
Здравстуйте! Использую ADO + MSSQL 2005. Сталкнулся с проблемой - необходимо выбрать записи из таблицы, но при этому пропустить несколько первых. То есть, есть ISAPI гостевой книги, соответственно с переходами по страницам. И конечно не хочется тянуть из БД все записи, пролистывать их в цикле программы и выводить нужные. Есть ли возможность программно на через селективный запрос запросить записи начиная с 40 по 50? З.Ы. Наткунлся на http://msdn2.microsoft.com/en-us/library/bb738680.aspx You can perform physical paging by using the SKIP sub-clause in the ORDER BY clause. SKIP cannot be used separately from the ORDER BY clause.
Syntax
[ SKIP (n) ] Arguments n The number of items to skip.
Remarks If a SKIP expression sub-clause is present in an ORDER BY clause, the results will be sorted according the sort specification and the result set will include rows starting from the next row immediately after the SKIP expression. For example, SKIP 5 will skip the first five rows and return from the sixth row forward.
Note An Entity SQL query is invalid if both the TOP modifier and the SKIP sub-clause are present in the same query expression. The query should be rewritten by changing the TOP expression to the LIMIT expression. Note In SQL Server 2000, using SKIP with ORDER BY on non-key columns might return incorrect results. More than the specified number of rows might be skipped if the non-key column has duplicate data in it. This is due to how SKIP is translated for SQL Server 2000. For example, in the following code more than five rows might be skipped if E.NonKeyColumn has duplicate values: SELECT [E] FROM Container.EntitySet AS [E] ORDER BY [E].[NonKeyColumn] DESC SKIP 5L
Example The following Entity SQL query uses the ORDER BY operator with SKIP to specify the sort order used on objects returned in a SELECT statement. The query is based on the AdventureWorks Sales Model. To compile and run this query, follow these steps:
Follow the procedure in How to: Execute an Entity SQL Query Using EntityCommand (Entity Framework).
Substitute the query string in the sample with the following query:
Copy Code SELECT VALUE e1 FROM AdventureWorksEntities.Product AS e1 order by e1.ListPrice SKIP(70)
Но видемо руки у меня ростут не оттуда )
-
> запросить записи начиная с 40 по 50? в 2005 появилась нумерация строк в запросах (RowNum), т.что запрос определенных нумерацией становится очевидным.
LIMIT это из MySql, также как и этот скопированный кусок хелпа... SKIP не знаю, не пользовался, но судя по тому что он в том же тексте с LIMIT...
-
Спасибо, видемо все же придется делать так: SELECT *
FROM (SELECT TOP (20) ROW_NUMBER() OVER (ORDER BY TDate) AS TmpR, *
FROM SiteGuestBook) TmpR1
WHERE TmpR BETWEEN 10 AND 20 Жаль что нет аналога SKIP & LIMIT...
-
> LIMIT это из MySql, также как и этот скопированный кусок > хелпа... SKIP не знаю, не пользовался, но судя по тому что > он в том же тексте с LIMIT...
Это не MySQL, Entity SQL, часть ADO.NET
-
> Жаль что нет аналога SKIP & LIMIT...
Как это нет, а это что? SELECT c.ContactID as ID, c.LastName as Name FROM
AdventureWorks.Contact AS c ORDER BY c.ContactID SKIP 9 LIMIT 3;
-
> Это не MySQL, Entity SQL, часть ADO.NET ясно, но для меня бесполезно, ADO на запросе из [4] дает "Incorrect syntax near 'SKIP'"
-
кстати непонятно почему... или ADO.NET сам выполняет/преобразовывает запросы? по идее то должен передать в MSSQL и получить результат также как ADO, и тогда синтаксис их запросов (ADO/ADO.NET) должен быть одинаков, и зависеть только от поддержки данного синтаксиса MSSQL-ем.
-
> sniknik (21.04.2008 12:00:05) [5]
АДО даст, это должно использоваться только в ADO.NET и при использование Entity SQL Широко применяется в ASP.NET или скрыто или явно, для разбиения на страницы.
-
> sniknik (21.04.2008 12:04:06) [6]
Ну я уже написал, что это даже не ADO.NET и тем более сервер.
-
-
> Entity SQL — новый язык, обеспечивающий исполнение декларативных > запросов, ориентированных на наборы, а также обновление > сущностей и связей в Entity Data Model. Для Entity SQL практически > не важен провайдер данных, поэтому одни и те же запросы > можно исполнять через разные провайдеры БД, что экономит > время на написание кода.
взамен увеличивая время исполнения запроса, т.к. не учитывает особенности диалекта сервера.
|