Результаты SQL Server подкачки страниц 2005 года

Эта библиотека синтаксического анализа веса должна решить все подобные проблемы. Мне нравится библиотека, потому что ее довольно легко расширить.

Пример синтаксического анализа:

var caseOne = Date.parseDate("Jul 8, 2005", "M d, Y");
var caseTwo = Date.parseDate("2005-07-08", "Y-m-d");

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

console.log( caseOne.dateFormat("M d, Y") );
console.log( caseTwo.dateFormat("M d, Y") );
console.log( caseOne.dateFormat("Y-m-d") );
console.log( caseTwo.dateFormat("Y-m-d") );

39
задан mattytommo 4 May 2012 в 09:48
поделиться

6 ответов

Можно использовать the Row_Number() функция. Его используемый следующим образом:

SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users

, От которого это приведет к набору результатов с RowID поле, между которым можно использовать для страницы.

SELECT * 
FROM 
    ( SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
      FROM Users 
    ) As RowResults
WHERE RowID Between 5 AND 10

и т.д.

35
ответ дан Pat 27 November 2019 в 02:45
поделиться

При попытке попасть в точку оператор (общее количество плюс подкачка страниц). Вы, возможно, должны были бы исследовать поддержку SQL Server для раздела пунктом (функции работы с окнами в терминах ANSI SQL). В Oracle синтаксис точно так же, как пример выше использования row_number (), но я также добавил раздел пунктом для получения общего количества строк, включенных с каждой строкой, возвращенной в подкачке страниц (строки итогов 1,262):

SELECT rn, total_rows, x.OWNER, x.object_name, x.object_type
FROM (SELECT COUNT (*) OVER (PARTITION BY owner) AS TOTAL_ROWS,
         ROW_NUMBER () OVER (ORDER BY 1) AS rn, uo.*
         FROM all_objects uo
         WHERE owner = 'CSEIS') x
WHERE rn BETWEEN 6 AND 10

Примечание, которое я имею, где владелец = 'CSEIS' и мой раздел находятся на владельце. Таким образом, результаты:

RN  TOTAL_ROWS  OWNER   OBJECT_NAME            OBJECT_TYPE
6   1262    CSEIS   CG$BDS_MODIFICATION_TYPES   TRIGGER
7   1262    CSEIS   CG$AUS_MODIFICATION_TYPES   TRIGGER
8   1262    CSEIS   CG$BDR_MODIFICATION_TYPES   TRIGGER
9   1262    CSEIS   CG$ADS_MODIFICATION_TYPES   TRIGGER
10  1262    CSEIS   CG$BIS_LANGUAGES            TRIGGER
13
ответ дан Dez 27 November 2019 в 02:45
поделиться

Когда я должен сделать подкачку страниц, я обычно использую временную таблицу также. Можно использовать выходной параметр для возврата общего количества записей. Операторы выбора в выборе позволяют Вам сортировать данные по определенным столбцам, не будучи должен обратиться к динамическому SQL.

--Declaration--

--Variables
@StartIndex INT,
@PageSize INT,
@SortColumn VARCHAR(50),
@SortDirection CHAR(3),
@Results INT OUTPUT

--Statements--
SELECT @Results = COUNT(ID) FROM Customers
WHERE FirstName LIKE '%a%'

SET @StartIndex = @StartIndex - 1 --Either do this here or in code, but be consistent
CREATE TABLE #Page(ROW INT IDENTITY(1,1) NOT NULL, id INT, sorting_1 SQL_VARIANT, sorting_2 SQL_VARIANT)
INSERT INTO #Page(ID, sorting_1, sorting_2)
SELECT TOP (@StartIndex + @PageSize)
    ID,
    CASE
        WHEN @SortColumn='FirstName' AND @SortDirection='ASC' THEN CAST(FirstName AS SQL_VARIANT)
        WHEN @SortColumn='LastName' AND @SortDirection='ASC' THEN CAST(LastName AS SQL_VARIANT)
        ELSE NULL
    END AS sort_1,
    CASE
        WHEN @SortColumn='FirstName' AND @SortDirection='DES' THEN CAST(FirstName AS SQL_VARIANT)
        WHEN @SortColumn='LastName' AND @SortDirection='DES' THEN CAST(LastName AS SQL_VARIANT)
        ELSE NULL
    END AS sort_2
FROM (
    SELECT
        CustomerId AS ID,
        FirstName,
        LastName
    FROM Customers
    WHERE
        FirstName LIKE '%a%'
) C
ORDER BY sort_1 ASC, sort_2 DESC, ID ASC;

SELECT
    ID,
    Customers.FirstName,
    Customers.LastName
FROM #Page
INNER JOIN Customers ON
    ID = Customers.CustomerId
WHERE ROW > @StartIndex AND ROW <= (@StartIndex + @PageSize)
ORDER BY ROW ASC

DROP TABLE #Page
2
ответ дан Andrew Burgess 27 November 2019 в 02:45
поделиться

Я полагаю, что необходимо было бы выполнить отдельный запрос для выполнения этого unfortionately.

я смог выполнить это в своем предыдущем положении с помощью некоторой справки от этой страницы: Подкачка страниц в DotNet 2.0

у Них также есть он вытягивающий количество строки отдельно.

0
ответ дан Pat 27 November 2019 в 02:45
поделиться

Вот то, что я делаю для подкачки страниц: Все мои большие запросы, которые должны быть разбиты на страницы, кодируются, как вставляет во временную таблицу. Временная таблица имеет поле идентификационных данных, которое будет действовать подобным образом к row_number () упомянутый выше. Я храню количество строк во временной таблице в выходном параметре, таким образом, код вызова знает, сколько там общие записи. Код вызова также определяет, какую страницу он хочет, и сколько строк на страницу, которые выбраны из временной таблицы.

прохладная вещь о выполнении его этот путь состоит в том, что у меня также есть ссылка "Экспорта", которая позволяет Вам получать все строки из отчета, возвращенного как CSV выше каждой сетки в моем приложении. Эта ссылка использует ту же хранимую процедуру: Вы просто возвращаете содержание временной таблицы вместо того, чтобы делать логику подкачки страниц. Это умиротворяет пользователей, которые ненавидят подкачку страниц и хотят видеть все и хотеть отсортировать ее миллионом различных способов.

0
ответ дан Eric Z Beard 27 November 2019 в 02:45
поделиться

Принятый ответ на этот вопрос на самом деле не работает для меня ... Мне пришлось прыгнуть еще один обруч, чтобы заставить его работать.

Когда я попробовал ответ

SELECT Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
FROM Users
WHERE RowID Between 0 AND 9

, он потерпел неудачу, пожаловавшись, что не знает, что такое RowID.

Я должен был обернуть его во внутренний выбор, например, так:

SELECT * 
FROM
    (SELECT
    Row_Number() OVER(ORDER BY UserName) As RowID, UserFirstName, UserLastName
    FROM Users
    ) innerSelect
WHERE RowID Between 0 AND 9

, а затем это сработало.

5
ответ дан Beska 27 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: