Пейджинг и сортировка с существующей хранимой процедурой - PullRequest
2 голосов
/ 12 июля 2010

У меня есть устаревшая хранимая процедура, которая возвращает большой набор результатов.Проблема в том, что набор результатов слишком велик, чтобы получить все сразу, а затем выполнить разбиение на страницы и сортировку на веб-стороне.

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

Что-то вроде:

EXEC the_sp LIMIT 50 ORDER BY A

Ответы [ 2 ]

1 голос
/ 12 июля 2010

Без изменения кода хранимой процедуры ваши параметры довольно ограничены.

Вы могли бы сделать

CREATE TABLE #results(
    [rownum] [int] identity(1,1) NOT NULL,
    ...Other Columns matching stored procedure result format
) 

insert into #results 
EXECUTE dbo.the_sp

SELECT * FROM #results 
WHERE rownum BETWEEN 50 AND 100

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

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

SET ROWCOUNT 100
EXECUTE dbo.the_sp

Чтобы прекратить возвращать ненужные результаты, принадлежащие страницам после отображаемой

Но так как это будет применяться к каждому выражению в хранимой процедуре (а не только к последнему, возвращающему результаты клиенту), это вполне может не подойти.

0 голосов
/ 12 июля 2010

См. Пейджинг SQL Server 2005 - Святой Грааль (требуется бесплатная регистрация) (и относится к SQL Server 2005 и далее)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...