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.