Strona główna > SQL > Masowe dodawanie adresów IP i MAC do bazy SQL

Masowe dodawanie adresów IP i MAC do bazy SQL

Niedziela, słoneczny dzień – jeden z pierwszych w tym roku – a tu mi przytrafiło się siedzieć przy bazie danych MS SQL przy dodawaniu zakresów:

– IP

– Portów

– MAC

do tabelki.

Rozwiązania problemu są dwa:

  • dodać wszystko ręcznie, tyle, że mam do dodania 255 elementów 😦
  • spróbować napisać automat, który to zrobi za mnie.

Po chwili…przełamuje się i podejmuję męską decyzję, że napiszę jednak automat.
Wymagania jakie stawiam przed sobą to:

  • zrobienie tabelki, która posiada kolumny do przechowywania adresu IP, adresu MAC i portu
  • napisać skrypt, który doda:
    Pula adresów MAC:
    Start: 00-1E-C8-C7-1C- (01)
    Koniec: 00-1E-C8-C7-1C- (FE) 

    Pula adresów IP:
    Start: 172.8.250.1
    Koniec: 172.8.250.254

    Pula portów:
    Start: 51001
    Koniec: 51254

Zaczynam od tabelki:

CREATE TABLE[dbo].[Maitanance_IP](
[IPID][uniqueidentifier]NOTNULL,
[MAC][nvarchar](max)NOTNULL,
[CreationDate][datetime]NOTNULL,
[IsDeleted][bit]NOTNULL,
[IP][nvarchar](max)NOTNULL,
[Port][int]NOTNULL
)

Skrypt:

Na początek tworzę szkielet komendy insert do dodania pojedyńczego wiersza:

insert into[dbo].[Maitanance_IP]
(
[IPID],
[MAC],
[IP],
[Port],
[CreationDate],
[IsDeleted]
)
values
(
newid(),
[MAC],
[IP],
[Port],
getutcdate(),
‚false’
)

elementy

[MAC], [IP], [Port] zastąpię logiką dodającą odpowiednie wartości. Jedyny problem na teraz jest taki, że brakuje nam czegoś co pozwoliło by przekonwertować wartość liczbową na wartość HEX.

SELECT CONVERT(VARBINARY(1), @WartoscINT)

która pozwala na przekonwertowanie wartości od 0 do 255.
To co mi jest potrzebne to jedynie FF i dodatkowo jako tekst, więc muszę trochę pokonwertować i powycinaćSELECT SUBSTRING(CONVERT(NVARCHAR(5),CONVERT(VARBINARY(1),@counter), 1), 3, 2)

Konwertujemy na tekst, który ma 5 znaków liczbę HEX uzyskaną z liczby zwykłej i przycinamy do 2 znaków zaczynając od 3 znakuNa koniec efekt końcowy z pętlą

declare @
counter
int= 1

WHILE (@counter< 255)
begin
insertinto[dbo].[Maitanance_IP]
(
[IPID],
[MAC],
[IP],
[Port],
[CreationDate],
[IsDeleted]
)
values
(
newid(),
’00-1E-C8-C7-1C-‚+SUBSTRING(CONVERT(NVARCHAR(5),CONVERT(VARBINARY(1),@counter), 1),3, 2),
‚172.8.250.’+CONVERT(NVARCHAR(3),@counter),
5100+@counter,
getutcdate(),
‚false’
)
set@counter=@counter+ 1
end

…ufff, i to koniec.

Kategorie:SQL
  1. Brak komentarzy.
  1. No trackbacks yet.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: