SQL Server разбивает на страницы набора результатов - PullRequest
1 голос
/ 19 января 2011

У меня очень мясная хранимая процедура в БД SQL Server 2000, которая возвращает один набор результатов.Я не хочу (не разрешено) трогать исходный SP, но хотел бы добавить нумерацию страниц к возвращенным записям.

Можно ли обернуть этот SP другим, который принимает возвращенный набор результатов и дает только строкиОт Х до Y?

Ответы [ 3 ]

2 голосов
/ 19 января 2011
create procedure ProcWrap
as

declare @T table (ID int, Name nvarchar(50))

insert into @T
exec ProcToWrap

select *
from @T
where ID < 10

Редактировать 1 У меня нет SQL Server 2000 для тестирования, и я не помню, были ли тогда переменные таблицы доступными. Вот процедура, использующая вместо этого временную таблицу. Добавлен столбец идентификаторов RowNum, который можно использовать для нумерации страниц.

create procedure ProcWrap2
as

create table #T (RowNum int identity, ID int, Name nvarchar(50))

insert into #T
exec ProcToWrap

select *
from #T
where RowNum between 10 and 19

drop table #T

Редактировать 2 Выходные данные из ProcToWrap в этом случае - это ID столбца и Имя. RowNum генерируется автоматически.

1 голос
/ 19 января 2011

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

Чтобы получить набор строк из ваших результатов, вам нужно использовать функцию ROW_NUMER():

SELECT
   ROW_NUMBER() OVER (ORDER BY ID) AS row_number, *
FROM
   Your_Temp_Table
WHERE row_number BETWEEN 11 AND 20 -- For the second page of results with 10 per page.

РЕДАКТИРОВАТЬ: Просто понял, что вы используете SQL Server 2000, который не имеет ROW_NUMBER(), извините

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

EDIT3: Вот ссылка на статью, в которой обсуждается разбиение на страницы в SQL Server 2000

1 голос
/ 19 января 2011

Получите результаты от SP и поместите их во временную таблицу, затем вы можете выбрать X результатов из этой таблицы.

...