Även om SQL Server är extremt kraftfull som en relationsdatabas, kan det ibland vara lite skrämmande när det gäller att leta upp underliggande information om själva databassystemet.
För att lindra denna huvudvärk i en liten del, ska vi kort utforska hur man hittar alla tabeller i databasen som innehåller ett särskilt kolumnnamn .
SQL-serverkatalogvyer
Ett grundläggande koncept att förstå om SQL Server är catalog views
, som faktiskt är databastabeller (catalogs
i det här fallet) som visar systemomfattande information om SQL Server Database Engine.
Fråga systeminformation
Alla catalog views
nås via en SELECT
SQL-sats FROM
en specifik katalog inom sys.
namnutrymme.
Till exempel kan följande sats användas för att visa information om alla databastabeller i systemet via sys.tables
katalog:
SELECT
*
FROM
sys.tables
LIKE-påstående och jokertecken
Innan vi går in på hur man extraherar alla tabeller med ett visst namn, bör vi kort utforska vad LIKE
uttalandet gör det, liksom jokertecknet (%
) symbol och hur de används tillsammans.
LIKE
används i en fråga för att avgöra om ett visst teckenmönster (vanligtvis värdena för en angiven column
) matcha en formaterad teckensträng.
LIKE
används ofta också tillsammans med %
tecken, som representerar ett jokertecken när man försöker matcha mönstret. När en %
jokertecken finns i mönstersträngen, anger det att alla tecken kan finnas på den platsen för mönstersträngen och fortfarande betraktas som en matchning.
Till exempel, om vi vill hitta alla böcker där title
börjar med "The" men kan innehålla alla tecken därefter, skulle vi använda ett uttalande som så:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The%'
Uppmärksamma läsare kanske inser att mönstret ovan inte bara skulle matcha titlar som hade "The" i början, utan också alla titlar med ord som helt enkelt börjar med de tre bokstäverna "The" också. Sedan %
jokertecken matchar alla tecken, om vi bara vill söka efter titlar med ordet "The", är det mer lämpligt att lägga till ett mellanslag:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The %'
Välja tabeller som innehåller ett kolumnnamn
Med vår grundläggande kunskap om båda catalog views
och LIKE
uttalande är vi nu utrustade för att slå upp alla tabeller i vårt system som innehåller ett visst kolumnnamn:
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'
Vi måste kombinera information från två kataloger, sys.tables
och sys.columns
, så vi använder en JOIN
påstående. De två är associerade av object_id
fältet, så vi JOIN
på det fältet.
Därifrån är det en enkel fråga att välja ColumnName
och TableName
av våra resultat, och slutligen, naturligtvis, bara leta upp poster där sys.columns.name
är lika med vårt ColumnName
sträng.
Den här frågan hittar dock bara exakta matchningar av kolumnnamnet. Om vi vill hitta partiella matchningar kan vi använda LIKE
och %
jokertecken istället:
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%'
Där har vi det! En enkel fråga för att slå upp alla tabeller och associerade kolumner med ett särskilt (eller liknande) kolumnnamn i dem.