2012-06-04 4 views
3

Им интересно, как бы вы гарантировали, что результаты, возвращаемые из SProc и хранящиеся в datatable, не слишком велики для обработки в памяти.Обеспечение SProc не возвращает слишком много данных

У меня уже есть копание и найдено следующее: Find size of object instance in bytes in c#, но выбранный ответ предполагает не делать этого.

Я предполагаю, что это проблема, которая была решена до того, как этот идентификатор оценит любые указатели.

Спасибо.

+0

возвращают ли sproc поля переменной длины, как 'VARCHAR (MAX),' VARBINARY (MAX) ' или похожие? – Quassnoi

+0

Atm, база данных содержит только float и datetime2. –

+0

просто ограничьте свои результаты с помощью 'SELECT TOP 1000' или аналогичного. – Quassnoi

ответ

2

Возможно, вы захотите реализовать пейджинг.

Чтобы сделать это, добавьте @pageNum и @pageSize параметры вашего SP и изменить запрос:

SELECT * 
FROM (
     SELECT *, ROW_NUMBER() OVER (ORDER BY whatever_field) rn 
     FROM (
--    here goes the old query 
       ) q 
     WHERE rn BETWEEN @pageSize * @pageNum + 1 AND @pageSize * (@pageNum + 1) 
     ) q 
ORDER BY 
     wnatever_field 
+0

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

Смежные вопросы