Доступ к метаданным базы данных - PullRequest
1 голос
/ 06 сентября 2011

Я столкнулся с трудной проблемой.У меня есть база данных с использованием Microsoft SQL 2008, и в этой базе данных есть много таблиц.Таблицы были сгенерированы автоматически и не имеют значимых имен.Мне нужна одна конкретная таблица, и я не могу ее найти.

Я знаю, как называются имена нескольких столбцов в таблице.Есть ли способ, которым я могу просматривать все таблицы по одному, просматривая названия столбцов и проверяя, соответствуют ли они тем, которые я знаю.

Если они совпадают, то я могу заглянуть дальшетаблица, чтобы увидеть, если это тот, который я ищу.Это звучит как хороший подход к проблеме?Является ли это возможным?Есть идеи, с чего начать?

Ответы [ 3 ]

2 голосов
/ 06 сентября 2011
SELECT OBJECT_SCHEMA_NAME([object_id]),
    OBJECT_NAME([object_id]) 
    FROM sys.columns 
    WHERE name IN ('column 1', 'column 2' 
    /* , ... other columns */);

РЕДАКТИРОВАТЬ по запросу, если ОП предназначено для идентификации ВСЕХ против ЛЮБОГО:

SELECT OBJECT_SCHEMA_NAME([object_id), name 
FROM sys.tables AS t
WHERE EXISTS 
(
    SELECT 1 FROM sys.columns
    WHERE name = 'column 1'
    AND [object_id] = t.[object_id]
)
AND EXISTS 
(
    SELECT 1 FROM sys.columns
    WHERE name = 'column 2'
    AND [object_id] = t.[object_id]
)
/* ... repeat for other columns ... */
1 голос
/ 06 сентября 2011

Альтернатива ответу Аарона с использованием Information_schema.columns вместо sys.columns

SELECT Table_name
FROM 
      information_schema.columns
WHERE 
      column_name IN ('column 1', 'column 2')
GROUP BY Table_Name
Having COUNT(column_name) = 2

См. Этот Запрос Data.SE для рабочего примера

0 голосов
/ 14 декабря 2012

С помощью приведенных выше сценариев вы ограничены подстановочными знаками SQL, которые могут быть довольно ограничены.Вы можете использовать SchemaCrawler grep для более мощного поиска в вашей базе данных с использованием регулярных выражений.SchemaCrawler также позволяет вам использовать дополнительные функции для поиска таблиц, связанных внешними ключами, поэтому, например, вы можете найти все таблицы, в которых есть столбец адреса клиента, а также таблицы, которые ссылаются на эти таблицы.SchemaCrawler - это инструмент командной строки, связанный с драйвером базы данных Microsoft SQL Server.

Sualeh Fatehi, SchemaCrawler

...