У меня есть следующее заявление TSQL, я пытаюсь выяснить, как я могу получать результаты (по 100 строк за раз), хранить их в переменной (так как мне придется добавить итоговые значения после каждого выбора) и продолжать выбирать в цикле while, пока не будет найдено больше записей, а затем верните итоговые значения переменных в вызывающую функцию.В то время как цикл в TSQL с суммой составляет
SELECT [OrderUser].OrderUserId, ISNULL(SUM(total.FileSize), 0), ISNULL(SUM(total.CompressedFileSize), 0)
FROM
(
SELECT DISTINCT TOP(100) ProductSize.OrderUserId, ProductSize.FileInfoId,
CAST(ProductSize.FileSize AS BIGINT) AS FileSize,
CAST(ProductSize.CompressedFileSize AS BIGINT) AS CompressedFileSize
FROM ProductSize WITH (NOLOCK)
INNER JOIN [Version] ON ProductSize.VersionId = [Version].VersionId
) AS total RIGHT OUTER JOIN [OrderUser] WITH (NOLOCK) ON total.OrderUserId = [OrderUser].OrderUserId
WHERE NOT ([OrderUser].isCustomer = 1 AND [OrderUser].isEndOrderUser = 0 OR [OrderUser].isLocation = 1)
AND [OrderUser].OrderUserId = 1
GROUP BY [OrderUser].OrderUserId
Почему вы разбиваете их на партии 100, если все, что вы делаете, суммирует их? Или вам нужна сумма для каждой партии по 100 рядов по отдельности? –
Какую версию SQL Server вы используете? –
Я использую SQL 2005. Я хочу сделать сумму в пакетах, чтобы я не сливал SQL-сервер, так как эта таблица содержит 10-30 миллионов записей. – RPS