Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So finden Sie Tabellen, die eine bestimmte Spalte in SQL Server enthalten

Obwohl SQL Server als relationale Datenbank äußerst leistungsfähig ist, kann es manchmal etwas entmutigend sein, wenn es darum geht, zugrunde liegende Informationen über das Datenbanksystem selbst nachzuschlagen.

Um diese Kopfschmerzen etwas zu lindern, untersuchen wir kurz, wie Sie alle Tabellen in der Datenbank finden, die einen bestimmten Spaltennamen enthalten .

SQL Server-Katalogansichten

Ein grundlegendes Konzept, das Sie über SQL Server verstehen sollten, ist das der catalog views , die praktisch Datenbanktabellen sind (catalogs in diesem Fall), die systemweite Informationen über die SQL Server-Datenbank-Engine anzeigen.

Systeminformationen abfragen

Alle catalog views werden über ein SELECT aufgerufen SQL-Anweisung FROM einen bestimmten Katalog innerhalb des sys. Namensraum.

Beispielsweise kann die folgende Anweisung verwendet werden, um Informationen über alle Datenbanktabellen im System über die sys.tables anzuzeigen Katalog:

SELECT
  *
FROM
  sys.tables

LIKE-Anweisung und Platzhalterzeichen

Bevor wir uns damit befassen, wie alle Tabellen mit einem bestimmten Namen extrahiert werden, sollten wir kurz untersuchen, was der LIKE ist -Anweisung sowie der Platzhalter (% )-Symbol und wie sie zusammen verwendet werden.

LIKE wird in einer Abfrage verwendet, um festzustellen, ob ein bestimmtes Zeichenmuster (normalerweise die Werte einer bestimmten column ) entsprechen einer formatierten Zeichenkette.

LIKE wird oft auch in Verbindung mit dem % verwendet Zeichen, das einen Platzhalter darstellt, wenn versucht wird, das Muster zu finden. Wenn ein % Platzhalterzeichen in der Musterzeichenfolge vorhanden ist, zeigt dies an, dass beliebig Zeichen können an dieser Stelle der Musterzeichenfolge vorhanden sein und dennoch als Übereinstimmung betrachtet werden.

Wenn wir zum Beispiel alle Bücher finden möchten, in denen der title beginnt mit „The“, aber danach beliebige Zeichen enthalten können, würden wir eine Anweisung wie diese verwenden:

SELECT
  title,
  primary_author,
  published_date
FROM
  books
WHERE
  title LIKE 'The%'

Aufmerksame Leser werden vielleicht erkennen, dass das obige Muster nicht nur zu Titeln passt, die „The“ am Anfang haben, sondern auch zu allen Titeln, deren Wörter einfach mit den drei Buchstaben „The“ beginnen. Seit % Wildcards passen zu beliebigen Zeichen, wenn wir nur nach Titeln mit dem Wort „The“ suchen wollen, ist das Hinzufügen eines Leerzeichens angemessener:

SELECT
  title,
  primary_author,
  published_date
FROM
  books
WHERE
  title LIKE 'The %'

Auswahl von Tabellen, die einen Spaltennamen enthalten

Mit unseren Grundkenntnissen beider catalog views und das LIKE -Anweisung sind wir jetzt in der Lage, alle Tabellen in unserem System nachzuschlagen, die einen bestimmten Spaltennamen enthalten:

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'

Wir müssen Informationen von zwei kombinieren Kataloge, sys.tables und sys.columns , also verwenden wir einen JOIN Erklärung. Die beiden werden durch die object_id verknüpft Feld, also JOIN auf diesem Feld.

Von dort aus ist es einfach, den ColumnName auszuwählen und TableName unserer Ergebnisse, und schließlich natürlich nur nach Datensätzen suchen, in denen sys.columns.name ist gleich unserem ColumnName Zeichenfolge.

Diese Abfrage findet jedoch nur genaue Übereinstimmungen des Spaltennamens. Wenn wir teilweise Übereinstimmungen finden möchten, können wir LIKE verwenden und % stattdessen Platzhalterzeichen:

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%'

Da haben wir es! Eine einfache Abfrage zum Nachschlagen aller Tabellen und zugehörigen Spalten mit einem bestimmten (oder ähnlichen) Spaltennamen darin.