2016-11-10 3 views
0

Я хотел бы выполнить SQL-запрос, чтобы найти все таблицы в базе данных, которая не имеет определенного столбца?SQL Server - поиск столбца по всем таблицам базы данных

E.g. Мне нужен список таблиц, в которых нет столбца с именем «BranchID».

Благодарим за внимание.

+4

Подсказка: 'INFORMATION_SCHEMA.COLUMNS'. –

+0

Я понимаю, что мы имеем дело с таблицами и столбцами здесь, но каждый человек с ответом использовал виды INFORMATION_SCHEMA. Я должен согласиться с Аароном Бертрандом, что взгляды на каталоги являются лучшим вариантом в большинстве случаев. http://sqlblog.com/blogs/aaron_bertrand/archive/2011/11/03/the-case-against-information-schema-views.aspx –

ответ

3

Информация о схемах представления содержит метаданные о базе данных. Для получения дополнительной информации посетите here

Используя эти представления вы можете сделать что-то вроде этого ...

SELECT 
    t.TABLE_NAME 
FROM 
    INFORMATION_SCHEMA.TABLES AS t 
WHERE NOT EXISTS 
    (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS AS c WHERE c.TABLE_NAME = t.TABLE_NAME AND c.COLUMN_NAME = 'BranchID') 
0
select table_name 
from INFORMATION_SCHEMA.COLUMNS 
except 
select table_name 
from INFORMATION_SCHEMA.COLUMNS 
where column_name = 'BranchID' 

(из памяти, я мог бы иметь имена столбцов неправильно, но вы должны получить большую часть путь там :))

0

Это должно сработать.

SELECT table_name 
FROM INFORMATION_SCHEMA.columns c 
WHERE NOT EXISTS (
     SELECT table_name 
     FROM INFORMATION_SCHEMA.columns cc 
     WHERE cc.table_name = c.table_name 
      AND cc.column_name = 'Branch_id' 
     ) 

Прежде всего, мы выбираем table_name из INFORMATION_SCHEMA.COLUMNS где table_name не в запросе, который выбирает таблицы с колонкой Branch_ID

0

Вы можете использовать таблицу INFORMATION_SCHEMA.COLUMNS и INFORMATION_SCHEMA.TABLES таблицу, чтобы получить нужную информацию, используя обычные SQL-запросы.

В вашем случае вы должны использовать подзапрос:

select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME NOT IN (select TABLE_NAME from INFORMATION_SCHEMA.COLUMNS where COLUMN_NAME='BranchID') 
0

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

CREATE PROC SP_UTIL_findcolumns 
    @SearchString As varchar(250) = NULL 
AS 
BEGIN 
SELECT 
    t.TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES AS t 
WHERE NOT EXISTS 
    (SELECT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS AS c 
    WHERE c.TABLE_NAME = t.TABLE_NAME 
     AND c.COLUMN_NAME = @SearchString) 
END 
Смежные вопросы