sql >> Database >  >> RDS >> Sqlserver

Tabellen zoeken die een specifieke kolom bevatten in SQL Server

Hoewel het extreem krachtig is als relationele database, kan SQL Server soms wat ontmoedigend zijn als het gaat om het opzoeken van onderliggende informatie over het databasesysteem zelf.

Om deze hoofdpijn voor een deel te verlichten, zullen we kort onderzoeken hoe we alle tabellen in de database kunnen vinden die een bepaalde kolomnaam bevatten. .

SQL Server-catalogusweergaven

Een basisconcept om te begrijpen over SQL Server is dat van catalog views , die in feite databasetabellen zijn (catalogs in dit geval) die systeembrede informatie over de SQL Server Database Engine weergeven.

Systeeminformatie opvragen

Alle catalog views zijn toegankelijk via een SELECT SQL-instructie FROM een specifieke catalogus binnen de sys. naamruimte.

De volgende instructie kan bijvoorbeeld worden gebruikt om informatie over alle databasetabellen in het systeem te bekijken via de sys.tables catalogus:

SELECT
  *
FROM
  sys.tables

LIKE-statement en jokerteken

Voordat we ingaan op het extraheren van alle tabellen met een bepaalde naam, moeten we kort onderzoeken wat de LIKE statement doet, evenals het jokerteken (% ) symbool en hoe ze samen worden gebruikt.

LIKE wordt gebruikt in een query om te bepalen of een bepaald patroon van tekens (meestal de waarden van een opgegeven column ) overeenkomen met een opgemaakte tekenreeks.

LIKE wordt vaak ook gebruikt in combinatie met de % teken, dat een jokerteken vertegenwoordigt wanneer wordt geprobeerd het patroon te evenaren. Wanneer een % jokerteken is aanwezig in de patroontekenreeks, dit geeft aan dat elke tekens kunnen aanwezig zijn op die locatie van de patroontekenreeks en toch als een overeenkomst worden beschouwd.

Als we bijvoorbeeld alle boeken willen vinden waar de title begint met "The" maar daarna alle tekens kan bevatten, zouden we een verklaring als volgt gebruiken:

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

Oplettende lezers realiseren zich misschien dat het bovenstaande patroon niet alleen overeenkomt met titels met "The" aan het begin, maar ook met titels met woorden die gewoon beginnen met de drie letters "The". Sinds % wildcards komen overeen met alle tekens, als we alleen willen controleren op titels met het woord "The", is het toevoegen van een spatie meer geschikt:

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

Tabellen selecteren met een kolomnaam

Met onze basiskennis van beide catalog views en de LIKE statement, zijn we nu uitgerust om alle tabellen in ons systeem op te zoeken die een bepaalde kolomnaam bevatten:

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'

We moeten informatie combineren van twee catalogi, sys.tables en sys.columns , dus we gebruiken een JOIN uitspraak. De twee zijn verbonden door de object_id veld, dus we JOIN op dat veld.

Van daaruit is het een kwestie van het selecteren van de ColumnName en TableName van onze resultaten, en tot slot natuurlijk alleen records opzoeken waar sys.columns.name is gelijk aan onze ColumnName tekenreeks.

Deze zoekopdracht vindt echter alleen exacte overeenkomsten van de kolomnaam. Als we gedeeltelijke overeenkomsten willen vinden, kunnen we LIKE . gebruiken en % in plaats daarvan jokertekens:

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

Daar hebben we het! Een eenvoudige zoekopdracht om alle tabellen en bijbehorende kolommen op te zoeken met een bepaalde (of vergelijkbare) kolomnaam erin.


  1. SqlConnection.Close() binnen met behulp van instructie

  2. Waarom kunnen PL/pgSQL-functies een neveneffect hebben, terwijl SQL-functies dat niet kunnen?

  3. MySQL-tekenreeks vervangen

  4. Installeer PostgreSQL op Ubuntu 20.04