SQL server获取表相关信息

从大神同事那里学到的关于查数据库信息的SQL,记录一下,以待回看。
用的是SQL server2017
以下查询的字段是基础的,如果有需要其他字段可以继续追加。
 


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

发布了4 篇原创文章 · 获赞 1 · 访问量 69

猜你喜欢

转载自blog.csdn.net/qq_33666686/article/details/103886333
今日推荐