poniedziałek, 4 sierpnia 2014

Quick: #naskróty Wyszukiwanie tabel wg nazw kolumn

Każdy, kto rozpoczyna pracę z nieznaną bazą danych, często czuje się jak poszukiwacz karteczek w lesie (gdzie Slenderem jest szef oczekujący szybkich rezultatów "na wczoraj" :) ).

Załóżmy, że nasz szef chciałby abyśmy ("migusiem") odnaleźli informację na temat klienta, a przed nos dostaliśmy jego adres e-mail... i do roboty. Ok, tylko że to jest nasz pierwszy dzień w pracy, a baza liczy kilka tysięcy tabel....

Na podstawie zadania wiemy, że powinniśmy znaleźć tabelę, która posiada kolumnę z adresem e-mail. Ale przecież SQL Management Studio sam w sobie umożliwia wyszukiwanie TABEL, a instalowanie czegokolwiek na komputerze jest monitorowane, poza tym i tak nie posiadamy uprawnień...


...Ale  posiadamy fajny skrypt, który przeszuka strukturę w tabelach systemowych naszej bazy:

SELECT
    sysobjects.name as [tabela],
    syscolumns.name as [nazwa kolumny],
    systypes.name as [typ]
    FROM sysobjects
    JOIN syscolumns ON sysobjects.id = syscolumns.id
    JOIN systypes ON syscolumns.xtype=systypes.xtype
   WHERE sysobjects.xtype='U'
and syscolumns.name like '%mail%'
ORDER BY sysobjects.name,syscolumns.colid


Czemu '%mail%'

Ponieważ powinniśmy założyć, że element którego szukamy może nazywać się:
Email
E_mail
contactemail
ContactEMail
EmailAddress
etc...
A czasami po prostu "mail".Różne szkoły.


Gotowiec wyszukuje tabele, które zawierają kolumnę o wybranej nazwie.

Później wystarczy już sprawdzić w bardziej sensownych tabelach, czy znajdujemy to czego szukamy i w optymalnym (z reguły) przypadku, przesłać maila z wynikami. Oczywiście wszystko zależy od struktury bazy; jeśli np parametry rozwijane są "w dół" (wierszami), albo przechowywany jest XML, wynalazek nie zadziała (chyba że poszukamy po XML, Param, Value, etc). 

...Nie ma za co... :]

X3

Brak komentarzy:

Prześlij komentarz