Как найти имена столбцов для всех таблиц во всех базах данных в SQL Server - PullRequest
59 голосов
/ 28 апреля 2010

Я хочу найти все имена столбцов во всех таблицах во всех базах данных . Есть вопрос, который может сделать это для меня? База данных - Microsoft SQL Server 2000.

Ответы [ 12 ]

1 голос
/ 25 сентября 2013

пользователь @KM скажет лучший ответ.

Я использую это:

Declare @Table_Name VarChar(100) ,@Column_Name VarChar(100)
Set @Table_Name = ''
Set @Column_Name = ''

Select 
RowNumber = Row_Number() Over( PARTITION BY T.[Name] Order By T.[Name],C.column_id  ),
SCHEMA_NAME( T.schema_id ) As SchemaName ,  
T.[Name] As Table_Name ,
C.[Name] As Field_Name , 
sysType.name ,
C.max_length , C.is_nullable , C.is_identity , C.scale , C.precision  
From Sys.Tables As T
Left Join Sys.Columns As C On ( T.[Object_Id] = C.[Object_Id] )
Left Join sys.types As sysType On ( C.user_type_id = sysType.user_type_id )
Where ( Type = 'U' )
    And ( C.Name Like '%' + @Column_Name + '%' )  
    And ( T.Name Like '%' + @Table_Name + '%' ) 
0 голосов
/ 14 июня 2013

Незначительное уточнение решения KM для тех, кто, как я, развлекается на своем сервере БД.… 1001 *

DECLARE @SQL varchar(max)=''

SELECT @SQL=@SQL+'UNION
select 
'''+d.name +'.''+sh.name+''.''+o.name COLLATE SQL_Latin1_General_CP1_CI_AS,c.name COLLATE SQL_Latin1_General_CP1_CI_AS,c.column_id
from '+d.name +'.sys.columns            c
    inner join sys.objects  o on c.object_id=o.object_id
    INNER JOIN sys.schemas  sh on o.schema_id=sh.schema_id
'
FROM sys.databases d

SELECT @SQL=RIGHT(@SQL,LEN(@SQL)-5)+'order by 1,3'
--print @SQL

EXEC (@SQL)

(Все еще живя в надежде, что мы найдем способ сделать это, который можно обернуть в представление.)

...