ПОМЕЩЕНИЕ : Код приложения не может быть изменен. Условия очень специфичны. Я ищу что-то по книгам, в крайнем случае, если можете.
У меня есть табличная функция (встроенная), которая производит от 2 до 7 записей. Время от времени это может быть только 1 или до 15 (но редко).
Эта функция используется только приложением таким образом, без какого-либо ORDER BY.
select * from dbo.myfunction(...)
Есть ли какой-либо способ, по вашему опыту, гарантировать гарантировать (насколько вы когда-либо наблюдали, используя определенную технику), что результаты возвращаются в порядке второго столбца? Столбцы: varchar (3), datetime, varchar (50).
Не заставляйте меня начинать с , выберите *, это INTENTIONAL , чтобы внешний интерфейс отображал сколько бы столбцов я ни отображал в будущем.
Из опыта, с одним индексом (кластеризованным PK) для обхода данных, любая текущая версия SQL Server и уровня SP всегда должна выполнять простое сканирование INDEX для <20 записей без параллелизма, что дает мне упорядоченные результаты в приложении выберите. </s>
Ваши мысли? Я бы предпочел не допускать теории к обсуждению. Если вы можете придерживаться практического опыта и хранить проповеди о передовой практике дома, я был бы также признателен за это.
ОБНОВЛЕНО
Вот как это выглядит сейчас
create function dbo.myfunction(....)
returns @RES table
(
[#] int identity primary key clustered,
[Varchar3Col] varchar(3),
[DateTimeCol] datetime,
[Varchar50Col] varchar(50)
) as
BEGIN
declare @RES2 table
(
rn int,
[Varchar3Col] varchar(3),
[DateTimeCol] datetime,
[Varchar50Col] varchar(50)
)
insert @RES2
select rn=row_number() over (order by action_time),
[Varchar3Col]
[DateTimeCol]
[Varchar50Col]
from (.....)
inner join (.....) ON (.....)
declare @i int
set @i = 0
while @@rowcount > 0 begin
set @i=@i+1
insert @RES
select [Varchar3Col], [DateTimeCol], [Varchar50Col]
from @RES2
where rn=@i
end
return
END
GO
- Если вы посмотрите выше, заполнение @RES выполняется последовательно в желаемом порядке, вручную.
- @ RES имеет кластеризованный PK, представляющий вставленный порядок.
- столбцы достаточно малы, чтобы 20 строк всегда помещались на одной 8K-странице
Будет ли это работать (с простым SELECT из прикладного уровня)?