Hi
I been concerned that there has to be a better way of getting the results that you want. You may want to try out the following, it performs extremely well compared to the geometry option.
with ctetally as (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) N
FROM (VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) e1 (N), --10
(VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) e2 (N), --100
(VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) e3 (N), --1000
(VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) e4 (N), --10000
(VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) e5 (N) --100000
),
expandGeo as (
select ipstartint + N ipint, g.id
from #geo2ip g
cross apply (SELECT TOP ((ipendint - ipstartint) + 1) N - 1 N FROM ctetally) c
)
select f.id,
g.id,
ip_converted
from #fact_table f
left outer join expandGeo g on f.ip_converted = g.ipint;