Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak znaleźć tabele zawierające określoną kolumnę w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przedstawiamy nową funkcję — analizę zakleszczeń

  2. Jak zrozumieć typ danych geograficznych serwera SQL?

  3. SQL Select Nadchodzące urodziny

  4. Przyspieszone odzyskiwanie baz danych w programie SQL Server 2019

  5. Dzielenie wartości rozdzielanych w kolumnie SQL na wiele wierszy