SQL server table to obtain relevant information

Great God from his colleagues learned about the investigation of the SQL database information, record it, pending a look back.
Use the SQL server2017
field is the basis of the following query, if there is a need to continue append additional fields.
 


SELECT
    A.TABLE_NAME,       -- 表名
    TBLINFO.CMD,        -- 表注释
    A.ORDINAL_POSITION, -- 字段位置
    A.COLUMN_NAME,      -- 列名
    A.DATA_TYPE,        -- 类型
    CASE
        WHEN UPPER(A.DATA_TYPE) = 'DATETIMEOFFSET' THEN  CONVERT(VARCHAR(100),A.DATETIME_PRECISION)
        WHEN UPPER(A.DATA_TYPE) = 'NVARCHAR' THEN  CONVERT(VARCHAR(100),A.CHARACTER_MAXIMUM_LENGTH)
        WHEN UPPER(A.DATA_TYPE) = 'CHAR' THEN  CONVERT(VARCHAR(100),A.CHARACTER_MAXIMUM_LENGTH)
        WHEN UPPER(A.DATA_TYPE) = 'NCHAR' THEN  CONVERT(VARCHAR(100),A.CHARACTER_MAXIMUM_LENGTH)
        WHEN UPPER(A.DATA_TYPE) = 'DATETIME2' THEN  CONVERT(VARCHAR(100),A.DATETIME_PRECISION)
        WHEN UPPER(A.DATA_TYPE) = 'DECIMAL' THEN CONVERT(VARCHAR(100),A.NUMERIC_PRECISION) + ',' +CONVERT(VARCHAR(100),A.NUMERIC_SCALE)
        ELSE ''
    END AS LENGTH,      -- 长度
    CASE
        WHEN B.COLUMN_NAME IS NULL THEN  'NO'
        ELSE 'YES'
    END AS PK,          -- 是否为主键(YES:是, NO:不是)
    A.IS_NULLABLE,      -- 是否可为空(YES:可, NO:不可)
    COLINFO.CMD         -- 字段注释
FROM INFORMATION_SCHEMA.COLUMNS  AS A  -- 表字段信息
        LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS B -- 索引列上的约束信息
            ON A.TABLE_SCHEMA = B.TABLE_SCHEMA
            AND A.TABLE_NAME = B.TABLE_NAME
            AND A.COLUMN_NAME = B.COLUMN_NAME
        LEFT JOIN (
            SELECT TBL.name, INFO.minor_id, INFO.value AS CMD
            FROM SYS.EXTENDED_PROPERTIES AS INFO -- 扩展属性
                LEFT JOIN sysobjects TBL -- 系统对象表
                    ON INFO.major_id = TBL.id
            WHERE INFO.minor_id = 0
        ) AS TBLINFO
            ON A.TABLE_NAME = TBLINFO.name
        LEFT JOIN (
            SELECT TBL.name, INFO.minor_id, INFO.value AS CMD
            FROM SYS.EXTENDED_PROPERTIES AS INFO -- 扩展属性
                LEFT JOIN sysobjects TBL -- 系统对象表
                    ON INFO.major_id = TBL.id
        ) AS COLINFO
            ON A.TABLE_NAME = COLINFO.name
            AND A.ORDINAL_POSITION = COLINFO.minor_id
WHERE
    A.TABLE_SCHEMA = '{schemaName}'
    AND A.TABLE_NAME = '{tableName}'
ORDER BY A.TABLE_SCHEMA,A.TABLE_NAME,A.ORDINAL_POSITION

 

Released four original articles · won praise 1 · views 69

Guess you like

Origin blog.csdn.net/qq_33666686/article/details/103886333