• I did trial that and honestly there is not a lot in it, with solution 1 (mine) slightly faster 5-10% on average at scale of 1 million. My test rig:

    ------------------------------------------------------------------------------------------------

    -- Setup START

    -- http://www.sqlservercentral.com/Forums/Topic1594823-2799-2.aspx?Update=1

    ------------------------------------------------------------------------------------------------

    USE tempdb

    GO

    IF OBJECT_ID('#claims') IS NOT NULL DROP TABLE #claims

    CREATE TABLE #claims

    (

    claimNumberINT,

    maxSequenceINT,

    PRIMARY KEY ( claimNumber, maxSequence )

    )

    GO

    ;WITH cte AS

    (

    SELECT TOP 1000000 ROW_NUMBER() OVER ( ORDER BY ( SELECT 1 ) ) rn

    FROM master.sys.columns c1

    CROSS JOIN master.sys.columns c2

    CROSS JOIN master.sys.columns c3

    )

    INSERT INTO #claims ( claimNumber, maxSequence )

    --VALUES ( 111, 17 ), ( 222, 38 ), ( 333, 20 )

    SELECT rn, rn % 33

    FROM cte

    GO

    IF OBJECT_ID('dbo.numbers') IS NULL

    BEGIN

    CREATE TABLE dbo.numbers ( x INT, CONSTRAINT PK_numbers PRIMARY KEY ( x ) )

    INSERT INTO dbo.numbers ( x )

    SELECT TOP 1000 ROW_NUMBER() OVER ( ORDER BY ( SELECT 1 ) ) x

    FROM master.sys.columns c1

    CROSS JOIN master.sys.columns c2

    CROSS JOIN master.sys.columns c3

    END

    GO

    ------------------------------------------------------------------------------------------------

    -- Solution 1 START

    ------------------------------------------------------------------------------------------------

    DBCC DROPCLEANBUFFERS

    DBCC FREEPROCCACHE

    GO

    -- This was good at scale

    SELECT claimNumber, maxSequence + x.x AS maxSequence

    INTO #tmp1

    FROM (

    SELECT

    claimNumber,

    MAX(maxSequence) maxSequence,

    ( ( MAX(maxSequence) / 20 ) + 1 ) * 20 [rollupTo]

    FROM #claims

    GROUP BY claimNumber

    ) c

    CROSS JOIN dbo.numbers x

    WHERE x.x <= [rollupTo] - maxSequence

    -- Solution 1 END

    ------------------------------------------------------------------------------------------------

    ------------------------------------------------------------------------------------------------

    -- Solution 2 START

    -- ChrisM@Work

    ------------------------------------------------------------------------------------------------

    DBCC DROPCLEANBUFFERS

    DBCC FREEPROCCACHE

    GO

    -- Demonstrate a solution using the sample data

    ;WITH

    e1(n) AS (SELECT 1 FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) dt (n)),

    e2(n) AS (SELECT 1 FROM e1 a CROSS JOIN e1 b),

    e4(n) AS (SELECT 1 FROM e2 a CROSS JOIN e2 b)

    SELECT

    d.claimNumber,

    maxSequence = d.LastSequenceNumber + x.n

    INTO #tmp2

    FROM (

    SELECT

    claimNumber,

    RowsToConstruct = 20-(MAX(maxSequence)%20),

    LastSequenceNumber = MAX(maxSequence)

    FROM #claims

    GROUP BY claimNumber

    ) d

    CROSS APPLY (

    SELECT TOP (RowsToConstruct)

    n = ROW_NUMBER() OVER (ORDER BY (SELECT NULL))

    FROM e4

    ) x

    GO

    -- Solution 2 END

    ------------------------------------------------------------------------------------------------

    See attachment for results. Call it a draw? : )