Mssql 查询所有表的列(在所有数据库中)

109 阅读1分钟

Mssql 查询所有表的列(在所有数据库中)

需要单独一个库的,在where中注明即可

DECLARE @SQL varchar(max)
SET @SQL=''
SELECT @SQL=@SQL+'UNION
select
a.TABLE_CATALOG, 
a.TABLE_NAME,
a.COLUMN_NAME,
    CASE WHEN a.CHARACTER_MAXIMUM_LENGTH IS Null 
    THEN a.DATA_TYPE 
  ELSE CASE WHEN a.CHARACTER_MAXIMUM_LENGTH=-1 
    THEN a.DATA_TYPE+''(max)''
  ELSE a.DATA_TYPE+''(''+cast(a.CHARACTER_MAXIMUM_LENGTH as varchar(50))+'')''
    END END AS TYPE, 
  CASE WHEN b.COLUMN_NAME IS NULL THEN 0 ELSE 1 END AS IS_PRIMARY
from '+d.name+'.INFORMATION_SCHEMA.COLUMNS a 
    LEFT JOIN '+d.name+'.INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE b 
    ON a.TABLE_CATALOG=b.TABLE_CATALOG 
    AND a.TABLE_SCHEMA=b.TABLE_SCHEMA 
    AND a.TABLE_NAME=b.TABLE_NAME 
    AND a.COLUMN_NAME=b.COLUMN_NAME
'
FROM sys.databases d  --where d.name!=''
SELECT @SQL=RIGHT(@SQL,LEN(@SQL)-5)+'order by 1,3'
--print @SQL
EXEC (@SQL)
​
​