sql server 查询数据表字段、数据类型、数据长度、描述、主键、是否为空

 SQL Server代码如下:

SELECT 
    s.name AS SchemaName,
    t.name AS TableName,
    c.name AS ColumnName,
	ISNULL(ep.value, 'No Description') AS ColumnDescription,
	ISNULL(COLUMNPROPERTY(c.object_id, c.name, 'IsIdentity'), 0) AS IsIdentity,
    -- 数据类型 + 长度/精度拼接
    ty.name +
        CASE 
            WHEN ty.name IN ('char', 'varchar', 'nchar', 'nvarchar') 
                THEN '(' + 
                    CASE 
                        WHEN c.max_length = -1 THEN 'MAX'
                        ELSE 
                            CAST(
                                CASE 
                                    WHEN ty.name IN ('nchar', 'nvarchar') 
                                        THEN c.max_length / 2
                                    ELSE c.max_length
                                END AS VARCHAR
                            )
                    END + ')'
            WHEN ty.name IN ('decimal', 'numeric') 
                THEN '(' + CAST(c.precision AS VARCHAR) + ',' + CAST(c.scale AS VARCHAR) + ')'
            ELSE ''
        END AS DataTypeWithLength,

    -- 实际长度(字节)
    c.max_length AS ActualLengthBytes,

    -- 实际长度(字符数)
    CASE 
        WHEN ty.name IN ('nchar', 'nvarchar') THEN 
            CASE WHEN c.max_length = -1 THEN -1 ELSE c.max_length / 2 END
        ELSE 
            CASE WHEN c.max_length = -1 THEN -1 ELSE c.max_length END
    END AS ActualLengthChars,

    -- 是否可为空
    c.is_nullable
FROM 
    sys.columns c
    INNER JOIN sys.tables t ON c.object_id = t.object_id
    INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
    INNER JOIN sys.types ty ON c.user_type_id = ty.user_type_id
    LEFT JOIN sys.extended_properties ep ON ep.major_id = c.object_id AND ep.minor_id = c.column_id AND ep.name = 'MS_Description'
WHERE t.name='IM_Friend'
ORDER BY 
    s.name, t.name, c.column_id;

  

posted @ 2025-07-14 15:28  microsoft-zhcn  阅读(104)  评论(0)    收藏  举报