2015-10-06 2 views
0

Как я могу найти заданное имя столбца (например, '%tag%') во всех базах данных сервера?Поиск и перечисление имени столбца во всех базах данных SQL Server 2012

В поисках какой-то результат, как:

Database   TableName   ColumnName 
----------------------------------------------- 

I Needed из всех баз данных в одном кадре, а не только одну базу данных.

+1

Возможный дубликат [Найти все таблицы, содержащие столбец с указанным именем] (http://stackoverflow.com/questions/4849652/find-all-tables-containing-column-with-specified-name) –

ответ

0
declare @query nvarchar(max), @crlf nvarchar(2), @columnName nvarchar(50) 
    set @query='' 
    set @crlf=char(13) 

    /*Set the name you are searchng*/ 
    set @columnName='%tag%' 


    SELECT @[email protected] + 'select '''+name+''' as ''Datadase'', t.name as ''Table'', c.name as ''Column'' 
from ['+name+'].sys.tables t 
inner join ['++name+'].sys.columns c on t.object_id=c.object_id  
where c.name like '''+ @columnName +''' union all'+ @crlf +char(13) 
FROM master.dbo.sysdatabases 

    set @query=left(@query,len(@query)-len(' union all'+ @crlf)) 
    exec (@query) 
+0

пытался SELECT t.name FROM sys.tables t INNER JOIN sys.columns c on t.object_id = c.object_id WHERE c.name как «% tag%», но ничего не возвращает. Я выбираю мастер? Наверное, мне это нужно динамично. – Bill

+0

Вот вам полный ответ. – Horaciux

+0

спасибо. Я получаю следующую ошибку: Msg 451, уровень 16, состояние 1, строка 1 Не удается разрешить конфликт сортировки между «Latin1_General_CI_AS_KS_WS» и «SQL_Latin1_General_CP1_CI_AS» в операторе UNION ALL, который находится в столбце оператора SELECT 2. Msg 451, уровень 16, состояние 1 , Строка 1 Не удается разрешить конфликт сортировки между «Latin1_General_CI_AS_KS_WS» и «SQL_Latin1_General_CP1_CI_AS» в операторе UNION ALL, который находится в столбце оператора SELECT 3. – Bill