sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man hittar tabeller som innehåller en specifik kolumn i SQL Server

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


  1. Automatisera IRI Data Integration Jobs med Oracle Job Scheduler

  2. Vad är nytt i Postgres-XL 9.6

  3. MySQL MariaDB – Fråga med hjälp av Temp-tabell

  4. Hur man använder google translate URL i Oracle plsql