2011-08-21 48 views
0

我有我在互联网上找到的以下python代码,我想在每个ipv4地址有一个SQL数据库中的表。我不在python代码,但它的发现。c#IP地址发生器到SQL

我的问题是 1:是否有可用于生成表的T-SQL代码? (一列,即0.0.0.0-255.255.255.255)

2:我将如何在c#中做到这一点?使用最快的方法吗?我知道显示结果会降低控制台应用程序下降400%

#!/usr/bin/env python 
def generate_every_ip_address(): 
    for octet_1 in range(256): 
    for octet_2 in range(256): 
    for octet_3 in range(256): 
    for octet_4 in range(256): 
     yield "%d.%d.%d.%d" % (octet_1, octet_2, octet_3, octet_4) 

for ip_address in generate_every_ip_address(): 
    print ip_address 
+2

这就是4,228,250,625行。你存储为'varchar(15)'?这可能需要大约100 GB。你为什么想做这个? –

+0

我有空间;)它是我正在处理的“小”ip地址项目 – Mark

+0

int oct1 = 0; int oct2 = 0; int oct3 = 0; int oct4 = 0; (oct4 <255) 'code'while(oct4 <255) { Console.WriteLine(oct4); Console.Write(“。”); Console.Write(oct3); Console.Write(“。”); Console.Write(oct2); Console.Write(“。”); Console.Write(oct1); oct4 = oct4 + 1; (oct3 <255) {october3 = oct3 + 1; } while(oct2 <255) { oct2 = oct2 + 1; while(oct1 <255) 'code' – Mark

回答

0

这项工作?

DECLARE @a INTEGER 
DECLARE @b INTEGER 
DECLARE @c INTEGER 
DECLARE @d INTEGER 
DECLARE @IPADDRESS nvarchar(50) 

set @a = 0 

WHILE @a < 256 
BEGIN 
    SET @b = 0 
    WHILE @b < 256 
    BEGIN 
     SET @c = 0 
     WHILE @c < 256 
     BEGIN 
      SET @d = 0 
      WHILE @d < 256 
      BEGIN 
       SET @IPADDRESS = CAST(@a AS nvarchar(3)) + '.' + CAST(@b AS nvarchar(3)) + '.' + CAST(@c AS nvarchar(3)) + '.' + CAST(@d AS nvarchar(3)) 
       PRINT @IPADDRESS 
       SET @d = @d + 1 
      END 
      SET @c = @c + 1 
     END 
     SET @b = @b + 1 
    END 
    SET @a = @a + 1 
END 
0

要的16581375个批次的行会插入使用以下TSQL是相当简单的。

DECLARE @Counter INT 
SET @Counter = 0 
SET NOCOUNT ON ; 

WHILE (@Counter <= 255) 
    BEGIN 
     RAISERROR('Procesing %d' ,0,1,@Counter) WITH NOWAIT ; 

     WITH Numbers (N) 
        AS (SELECT CAST(number AS VARCHAR(3)) 
         FROM  master.dbo.spt_values 
         WHERE type = 'P' 
           AND number BETWEEN 0 AND 255 
        ) 
      INSERT INTO YourTable 
        (IPAddress 
        ) 
        SELECT @Counter + '.' + N1.N + '.' + N2.N + '.' + N3.N 
        FROM Numbers N1 , 
          Numbers N2 , 
          Numbers N3 


     SET @Counter = @Counter + 1 
    END 
0

请仅使用一个int IDENTITY列来存储每个IP地址。他们只有32位。用你存储的其他东西填满你的桌子。