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.