Используйте переменную таблицы, чтобы перебрать ваши данные.Вроде как использование курсора в Oracle ...
Если я правильно понимаю ваши примеры данных и мое предположение, что каждый transID устанавливает в 0 значение, вы меняете логику цикла так, чтобы она работала больше как do ...в то время как как этот пример здесь , где вы берете следующий набор транзакций и решаете, поддерживает ли он пакет ниже 5k.Это должно охватывать заполнение одной партии из 5000 или менее строк, которые равны 0 долл. США, при условии, что для каждого идентификатора транзакции установлено значение 0 долл. США
Declare @batchCursor TABLE (
TransID INT,
Credit INT, -- chose int for expediency
Debit INT,
Balance INT,
AccountNo Varchar(4)
),
@batchsize INT = 5000,
@rowCount INT = 0,
@transID INT = 1,
@transSize INT = 0;
while (@rowcount <= 5000)
BEGIN
INSERT INTO @batchCursor
SELECT * FROM [Apps2].[dbo].[GLTrans] -- you might need to enumerate all your column names
WHERE TransID = @transID;
SELECT @transSize = COUNT(*) FROM @batchCursor where TransID = @transID);
IF(@transSize > 0)
BEGIN
IF (@transSize + @rowCount < @batchSize)
BEGIN
Set @rowCount += transSize;
Set @transID += 1;
END;
END;
ELSE Set @transID += 1;
IF((Select count(*) FROM [Apps2].[dbo].[GLTrans] WHERE TransID = @transID) + @rowCount > @batch)
BREAK;
END;
.