sql >> Databáze >  >> RDS >> Sqlserver

Jak najít tabulky, které obsahují konkrétní sloupec na serveru SQL Server

Přestože je SQL Server jako relační databáze extrémně výkonný, může být občas poněkud skličující, pokud jde o vyhledávání základních informací o samotném databázovém systému.

Abychom z této malé části zmírnili tyto bolesti hlavy, stručně prozkoumáme, jak najít všechny tabulky v databázi, které obsahují název konkrétního sloupce .

Zobrazení katalogu SQL Server

Jedním ze základních konceptů, kterým je třeba o SQL Serveru porozumět, je koncept catalog views , což jsou ve skutečnosti databázové tabulky (catalogs v tomto případě), které zobrazují systémové informace o SQL Server Database Engine.

Dotaz na systémové informace

Všechna catalog views jsou přístupné pomocí SELECT SQL příkaz FROM specifický katalog v rámci sys. jmenný prostor.

Například následující příkaz lze použít k zobrazení informací o všech databázových tabulkách v systému prostřednictvím sys.tables katalog:

SELECT
  *
FROM
  sys.tables

Příkaz LIKE a zástupný znak

Než se pustíme do toho, jak extrahovat všechny tabulky s konkrétním názvem, měli bychom stručně prozkoumat, co LIKE příkaz ano, stejně jako zástupný znak (% ) a jak se používají společně.

LIKE se používá v dotazu k určení, zda konkrétní vzor znaků (obvykle hodnoty zadaného column ) shodují se s formátovaným řetězcem znaků.

LIKE se často používá také ve spojení s % znak, který představuje zástupný znak při pokusu o shodu se vzorem. Když % v řetězci vzoru je přítomen zástupný znak, znamená to, že jakýkoli znaky mohou být přítomny v tomto umístění řetězce vzoru a přesto mohou být považovány za shodu.

Například pokud chceme najít všechny knihy, kde je title začíná s „The“, ale může obsahovat jakékoli další znaky, použili bychom příkaz jako takto:

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

Pozorní čtenáři by si mohli uvědomit, že výše uvedený vzor by se nehodil pouze k titulům, které měly na začátku „The“, ale také k jakýmkoliv titulům se slovy začínajícími jednoduše na tři písmena „The“. Od % zástupné znaky odpovídají libovolným znakům, pokud chceme pouze kontrolovat názvy se slovem „The“, je vhodnější přidat mezeru:

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

Výběr tabulek obsahujících název sloupce

S našimi základními znalostmi obou catalog views a LIKE jsme nyní vybaveni k vyhledání všech tabulek v našem systému, které obsahují konkrétní název sloupce:

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'

Potřebujeme spojit informace ze dvou katalogy, sys.tables a sys.columns , takže používáme JOIN prohlášení. Tyto dva jsou spojeny pomocí object_id pole, takže JOIN na tomto poli.

Odtud je to jednoduchá záležitost výběru ColumnName a TableName našich výsledků a nakonec samozřejmě pouze vyhledávání záznamů, kde sys.columns.name se rovná našemu ColumnName řetězec.

Tento dotaz však najde pouze přesné shody názvu sloupce. Pokud chceme najít částečné shody, můžeme použít LIKE a % místo toho zástupné znaky:

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

Tady to máme! Jednoduchý dotaz k vyhledání všech tabulek a přidružených sloupců s konkrétním (nebo podobným) názvem sloupce.


  1. Read Committed je nutností pro distribuované databáze SQL kompatibilní s Postgres

  2. Zdroj dat MySQL se ve Visual Studiu nezobrazuje

  3. Příklady SYSDATE() – MySQL

  4. Jak používat funkci Substring v PostgreSQL a Redshift