Ä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.