How to find column names for all tables in all databases in SQL Server

前端 未结 13 601
被撕碎了的回忆
被撕碎了的回忆 2020-11-28 04:30

I want to find all column names in all tables in all databases. Is there a query that can do that for me? The database is Microsoft SQL Server 2000.

相关标签:
13条回答
  • 2020-11-28 04:48

    Better way for you

    sp_MSForEachDB @command1='USE ?;
    SELECT 
        Table_Catalog 
        ,Table_Schema
        ,Table_Name
        ,Column_Name
        ,Data_Type
        ,Character_Maximum_Length
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME like ''%ColumnNameHere%'''
    
    0 讨论(0)
  • 2020-11-28 04:50

    user @KM say best Answer.

    I Use This :

    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 讨论(0)
  • 2020-11-28 04:52

    Minor refinement on KM's solution for those like me who've got collation fun on their DB server....

    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)
    

    (Still living in hope that we'll find a way to do this that can be wrapped into a view.)

    0 讨论(0)
  • 2020-11-28 04:55

    try the below query

    DECLARE @Query VARCHAR(max) 
    SELECT @Query = 'USE ? SELECT ''?'' AS DataBaseName,
                                    sys.columns.name AS ColumnName  ,
                                    sys.tables.name  AS TableName   ,
                                    schema_name (sys.tables.schema_Id) AS schemaName
                             FROM sys.columns
                             JOIN sys.tables 
                  ON sys.columns.object_id = sys.tables.object_id
                  WHERE sys.columns.name = ''id'' '
    EXEC SP_MSFOREACHDB @Query
    

    gives list of tables containing ID column from all databases.

    0 讨论(0)
  • Some minor improvements

    ->previous answers weren't showing all results

    ->possible to filter on column name by setting the column name variable

    DECLARE @columnname nvarchar(150)
    SET @columnname=''
    
    DECLARE @SQL varchar(max)
    SET @SQL=''
    SELECT @SQL=@SQL+'UNION
    select 
    '''+d.name+'.''+sh.name+''.''+o.name COLLATE SQL_Latin1_General_CP1_CI_AS as name,c.name COLLATE SQL_Latin1_General_CP1_CI_AS as columnname,c.column_id
    from '+d.name+'.sys.columns            c
        inner join '+d.name+'.sys.objects  o on c.object_id=o.object_id
        INNER JOIN '+d.name+'.sys.schemas  sh on o.schema_id=sh.schema_id
        where c.name like ''%'+@columnname+'%'' and sh.name<>''sys'' 
    '
    FROM sys.databases d
    SELECT @SQL=RIGHT(@SQL,LEN(@SQL)-5)+'order by 1,3'
    --print @SQL
    EXEC (@SQL)
    
    0 讨论(0)
  • 2020-11-28 04:57
    SELECT sys.columns.name AS ColumnName, tables.name AS TableName 
    FROM sys.columns 
         JOIN sys.tables ON sys.columns.object_id = tables.object_id
    
    0 讨论(0)
提交回复
热议问题