C # Генератор IP-адресов в SQL - PullRequest
       0

C # Генератор IP-адресов в SQL

0 голосов
/ 22 августа 2011

У меня есть следующий код Python, который я нашел в Интернете, я хотел бы создать таблицу в базе данных SQL с каждым существующим IPv4-адресом. Я не пишу код на python, но это то, что я нашел.

Мой вопрос 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

Ответы [ 3 ]

0 голосов
/ 22 августа 2011

Вставить в пакеты по 16 581 375 строк было бы довольно просто, используя следующий 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 голосов
/ 22 августа 2011

Пожалуйста, используйте столбец int IDENTITY для хранения каждого IP-адреса.Они всего 32 бита.Наполните свой стол чем-нибудь еще, что вы храните.

0 голосов
/ 22 августа 2011

Будет ли это работать?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...