2015-08-15 40 views
-1

我有IP地址,如「255.255.120.110-255.255.120.115,255.10.120.110-255.10.120.115,255.10.10.115」採取的給定範圍內所有IP地址到SQL Server表

我要插入到表。最後,我需要的結果如下圖所示:

IPAddresses 
    --------------- 
    255.255.120.110 
    255.255.120.111 
    255.255.120.112 
    255.255.120.113 
    255.255.120.114 
    255.255.120.115 
    255.255.120.118 
    255.255.120.120....... 
+0

他們都開始「255.255.120。」? –

+0

字符串操作在調用程序中通常會更好,而不是在SQL Server中(它沒有非常強大的字符串操作方法) – xanatos

+1

請不要根據發生某些事情發生的情況來創建示例。添加涵蓋所有案例的示例。 –

回答

0

ip地址EX: '255.255.120.110-255.255.120.115,255.10.120.110-255.10.120.115,255.10.10.115'

insert into #IPAddresses(ColumnName) 
     select * from [dbo].[splitFunction] (@IPAddresses,',') 

     declare @IPStart int 

     declare Cur_IPAddress cursor for 
     select substring(substring(Item, charindex('.', Item, charindex('.', Item, charindex('.', Item) + 1) + 1)+1, len(Item)),1, 
       charindex('-',substring(Item, charindex('.', Item, charindex('.', Item, charindex('.', Item) + 1) + 1)+1, len(Item)))-1) IPStart , 
       substring(Item,1, charindex('.', Item, charindex('.', Item, charindex('.', Item) + 1) + 1)) IPExt, 
       reverse(substring(reverse(Item),1,charindex('.',reverse(Item))-1)) MaxIp 
     from #IPAddresses where charindex('-',Item)>0 
     open Cur_IPAddress 
     fetch next from Cur_IPAddress into @IPStart, @IPExt, @MaxIp 
     while @@fetch_status = 0 
     begin 
      ;with X 
      as(
       select @IPStart Lev 
       union all 
       select X.Lev+1 
       from X 
       where X.Lev < @MaxIp 
      ) insert into #IPAddresses 
     select @IPExt +cast(Lev as varchar) Item from X option(maxrecursion 1000) 

     fetch next from Cur_IPAddress into @IPStart, @IPExt, @MaxIp 
     end 
     close Cur_IPAddress 
     deallocate Cur_IPAddress 

     delete from #IPAddresses where charindex('-', Item)>0 
     --select * from #IPAddresses 
    end