Макар и изключително мощен като релационна база данни, SQL Server може да бъде малко обезсърчителен понякога, когато става въпрос за търсене на основна информация за самата система от база данни.
За да облекчим тези главоболия в някаква малка част, ще разгледаме накратко как да намерим всички таблици в базата данни, които съдържат конкретно име на колона .
Изгледи на каталог на SQL сървър
Една основна концепция, която трябва да се разбере за SQL Server, е тази за catalog views
, които всъщност са таблици на база данни (catalogs
в този случай), които показват информация за цялата система за SQL Server Database Engine.
Запитване на системна информация
Всички catalog views
са достъпни чрез SELECT
SQL израз FROM
конкретен каталог в sys.
пространство от имена.
Например, следният израз може да се използва за преглед на информация за всички таблици на базата данни в системата чрез sys.tables
каталог:
SELECT
*
FROM
sys.tables
Изявление LIKE и заместващ знак
Преди да влезем в това как да извлечем всички таблици с определено име, трябва накратко да проучим какво LIKE
оператор прави, както и заместващият знак (%
) и как се използват заедно.
LIKE
се използва в заявка, за да се определи дали определен модел от знаци (обикновено стойностите на определена column
) съвпада с форматиран низ от знаци.
LIKE
често се използва и във връзка с %
символ, който представлява заместващ знак при опит да съвпадне с шаблона. Когато е %
В низа на шаблона присъства заместващ знак, което показва, че всякакъв символите могат да присъстват на това място на низа на шаблона и все пак да се считат за съвпадение.
Например, ако искаме да намерим всички книги, където title
започва с „The“, но може да съдържа всякакви знаци след това, бихме използвали изявление по следния начин:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The%'
Наблюдателните читатели може да осъзнаят, че горният модел не само ще съвпада със заглавия, които имат „The“ в началото, но също така и всички заглавия с думи, които просто започват с трите букви „The“. От %
заместващи знаци съответстват на всякакви знаци, ако искаме да проверим само заглавия с думата „The“, добавянето на интервал е по-подходящо:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The %'
Избор на таблици, съдържащи име на колона
С нашите основни познания и за двата catalog views
и LIKE
изявление, сега сме оборудвани да търсим всички таблици в нашата система, които съдържат конкретно име на колона:
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'
Трябва да комбинираме информация от две каталози, sys.tables
и sys.columns
, така че използваме JOIN
изявление. Двете са свързани с object_id
поле, така че ние JOIN
на това поле.
Оттам нататък е лесно да изберете ColumnName
и TableName
от нашите резултати и накрая, разбира се, само търсене на записи, където sys.columns.name
е равно на нашия ColumnName
низ.
Тази заявка обаче ще намери само точни съвпадения на името на колоната. Ако искаме да намерим частични съвпадения, можем да използваме LIKE
и %
вместо това заместващи знаци:
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%'
Ето го! Проста заявка за търсене на всички таблици и свързани колони с конкретно (или подобно) име на колона в тях.