Chociaż SQL Server jest niezwykle potężny jako relacyjna baza danych, może czasami być nieco zniechęcający, jeśli chodzi o wyszukiwanie podstawowych informacji o samym systemie bazy danych.
Aby trochę złagodzić te bóle głowy, krótko omówimy, jak znaleźć wszystkie tabele w bazie danych, które zawierają nazwę konkretnej kolumny .
Widoki katalogu SQL Server
Jedną z podstawowych koncepcji dotyczących SQL Server jest koncepcja catalog views
, które w rzeczywistości są tabelami bazy danych (catalogs
w tym przypadku), które wyświetlają ogólnosystemowe informacje o silniku bazy danych SQL Server.
Odpytywanie informacji o systemie
Wszystkie catalog views
są dostępne przez SELECT
Instrukcja SQL FROM
konkretny katalog w sys.
przestrzeń nazw.
Na przykład poniższej instrukcji można użyć do wyświetlenia informacji o wszystkich tabelach bazy danych w systemie za pośrednictwem sys.tables
katalog:
SELECT
*
FROM
sys.tables
Oświadczenie LIKE i symbol wieloznaczny
Zanim przejdziemy do wyodrębniania wszystkich tabel o określonej nazwie, powinniśmy krótko zbadać, co LIKE
tak samo jak symbol wieloznaczny (%
) i jak są używane razem.
LIKE
jest używany w zapytaniu do określenia czy określony wzorzec znaków (zazwyczaj wartości określonej column
) dopasuj sformatowany ciąg znaków.
LIKE
jest często używany w połączeniu z %
znak, który reprezentuje symbol wieloznaczny podczas próby dopasowania wzorca. Kiedy %
symbol wieloznaczny jest obecny w ciągu wzorca, oznacza to, że dowolny znaki mogą znajdować się w tej lokalizacji ciągu wzorca i nadal być uważane za dopasowanie.
Na przykład, jeśli chcemy znaleźć wszystkie książki, w których title
rozpoczyna się z „The”, ale później może zawierać dowolne znaki, użyjemy takiego stwierdzenia:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The%'
Uważni czytelnicy mogą zdać sobie sprawę, że powyższy wzorzec nie tylko pasuje do tytułów, które mają na początku „The”, ale także do wszelkich tytułów ze słowami zaczynającymi się po prostu na trzy litery „The”. Od %
symbole wieloznaczne pasują do dowolnych znaków, jeśli chcemy sprawdzić tylko tytuły ze słowem „The”, bardziej odpowiednie jest dodanie spacji:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The %'
Wybieranie tabel zawierających nazwę kolumny
Dzięki naszej podstawowej wiedzy o obu catalog views
i LIKE
oświadczenie, jesteśmy teraz przygotowani do wyszukiwania wszystkich tabel w naszym systemie, które zawierają konkretną nazwę kolumny:
SELECT
sys.columns.name AS ColumnName,
tables.name AS TableName
FROM
sys.columns
JOIN sys.tables ON
sys.columns.object_id = tables.object_id
WHERE
sys.columns.name = 'ColumnName'
Musimy połączyć informacje z dwóch katalogi, sys.tables
i sys.columns
, więc używamy JOIN
oświadczenie. Oba są powiązane przez object_id
pole, więc JOIN
na tym polu.
Stamtąd wystarczy wybrać ColumnName
i TableName
naszych wyników i na koniec oczywiście tylko wyszukiwanie rekordów, w których sys.columns.name
jest równy naszej ColumnName
ciąg.
Jednak to zapytanie znajdzie tylko dokładne dopasowania nazwy kolumny. Jeśli chcemy znaleźć częściowe dopasowania, możemy użyć LIKE
i %
zamiast tego znaki wieloznaczne:
SELECT
sys.columns.name AS ColumnName,
tables.name AS TableName
FROM
sys.columns
JOIN sys.tables ON
sys.columns.object_id = tables.object_id
WHERE
sys.columns.name LIKE '%ColumnName%'
Mamy to! Proste zapytanie do wyszukania wszystkich tabel i powiązanych kolumn z określoną (lub podobną) nazwą kolumny w nich.