sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan finder du tabeller, der indeholder en specifik kolonne i SQL Server

Selvom SQL Server er ekstremt kraftfuld som en relationsdatabase, kan den til tider være noget skræmmende, når det kommer til at finde underliggende information om selve databasesystemet.

For at lindre disse hovedpine i en lille del, vil vi kort undersøge, hvordan man finder alle tabeller i databasen, som indeholder et bestemt kolonnenavn .

SQL-serverkatalogvisninger

Et grundlæggende koncept at forstå om SQL Server er catalog views , som reelt er databasetabeller (catalogs i dette tilfælde), der viser systemdækkende information om SQL Server Database Engine.

Forespørgsel efter systemoplysninger

Alle catalog views tilgås via en SELECT SQL-sætning FROM et specifikt katalog i sys. navneområde.

For eksempel kan følgende sætning bruges til at se information om alle databasetabeller i systemet via sys.tables katalog:

SELECT
  *
FROM
  sys.tables

LIKE-erklæring og jokertegn

Før vi kommer ind på, hvordan man udtrækker alle tabeller med et bestemt navn, bør vi kort undersøge, hvad LIKE sætningen gør, såvel som jokertegnet (% ) symbol, og hvordan de bruges sammen.

LIKE bruges i en forespørgsel til at bestemme, om et bestemt mønster af tegn (typisk værdierne af en specificeret column ) matcher en formateret streng af tegn.

LIKE bruges ofte også sammen med % tegn, som repræsenterer et jokertegn, når man forsøger at matche mønsteret. Når en % jokertegn er til stede i mønsterstrengen, angiver det, at enhver tegn kan være til stede på denne placering af mønsterstrengen og stadig betragtes som et match.

For eksempel, hvis vi ønsker at finde alle bøger, hvor title begynder med "The", men kan indeholde alle tegn derefter, vil vi bruge en erklæring som sådan:

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

Observante læsere vil måske indse, at ovenstående mønster ikke kun ville matche titler, der havde "The" i begyndelsen, men også alle titler med ord, der simpelthen starter med de tre bogstaver "The" også. Siden % jokertegn matcher alle tegn, hvis vi kun ønsker at tjekke for titler med ordet "The", er det mere passende at tilføje et mellemrum:

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

Valg af tabeller, der indeholder et kolonnenavn

Med vores grundlæggende viden om begge catalog views og LIKE sætning, er vi nu udstyret til at slå alle tabeller i vores system op, der indeholder et bestemt kolonnenavn:

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 skal kombinere oplysninger fra to kataloger, sys.tables og sys.columns , så vi bruger en JOIN udmelding. De to er forbundet med object_id felt, så vi JOIN på det felt.

Derfra er det et simpelt spørgsmål om at vælge ColumnName og TableName af vores resultater, og til sidst selvfølgelig kun at slå op på poster, hvor sys.columns.name er lig med vores ColumnName streng.

Denne forespørgsel vil dog kun finde nøjagtige match af kolonnenavnet. Hvis vi ønsker at finde delvise matches, kan vi bruge LIKE og % jokertegn i stedet:

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

Der har vi det! En simpel forespørgsel til at slå alle tabeller og tilknyttede kolonner op med et bestemt (eller lignende) kolonnenavn i dem.


  1. MySQL IFNULL() Forklaret

  2. Sådan opretter du brugerdefinerede genveje i SQL Server Management Studio (SSMS) - SQL Server / TSQL tutorial Del 10

  3. En uventet bivirkning ved at tilføje et filtreret indeks

  4. Backend-versionen understøttes ikke til at designe databasediagrammer eller tabeller