SQL Server 查询数据库所有表及字段信息

分类:SQL     发布:2019-10-11     来源:本站     浏览:1986 次
--查询数据库的所有表
SELECT name,crdate FROM  sysobjects WHERE   xtype = 'U' ORDER BY Name ASC 

--查询指定表的所有字段信息
SELECT  表名 = CASE WHEN C.column_id = 1 THEN O.name  ELSE N'' END ,
        表说明 = ISNULL(CASE WHEN C.column_id = 1 THEN PTB.[value] END, N'') ,
        字段序号 = C.column_id ,
        字段名 = C.name ,
        主键 = ISNULL(IDX.PrimaryKey, N'') ,
        标识 = CASE WHEN C.is_identity = 1 THEN N'1'ELSE N'' END ,
        计算列 = CASE WHEN C.is_computed = 1 THEN N'1'ELSE N''END ,
        类型 = T.name ,
        字节数 = C.max_length ,
        长度 = COLUMNPROPERTY(C.[object_id], C.name, 'precision') ,
        小数位数 = C.scale ,
        允许空 = CASE WHEN C.is_nullable = 1 THEN N'1'ELSE N''END ,
        默认值 = ISNULL(D.definition, N'') ,
        字段说明 = ISNULL(PFD.[value], N'') ,
        索引 = ISNULL(IDX.IndexName, N'') ,
        索引排序 = ISNULL(IDX.Sort, N'') ,
        创建日期 = O.Create_Date ,
        修改日期 = O.Modify_date
FROM    sys.columns C
        INNER JOIN sys.objects O ON C.[object_id] = O.[object_id] AND O.type = 'U' AND O.is_ms_shipped = 0
        INNER JOIN sys.types T ON C.user_type_id = T.user_type_id
        LEFT JOIN sys.default_constraints D ON C.[object_id] = D.parent_object_id AND C.column_id = D.parent_column_id AND C.default_object_id = D.[object_id]
        LEFT JOIN sys.extended_properties PFD ON PFD.class = 1 AND C.[object_id] = PFD.major_id AND C.column_id = PFD.minor_id
        LEFT JOIN sys.extended_properties PTB ON PTB.class = 1 AND PTB.minor_id = 0 AND C.[object_id] = PTB.major_id
        -- 索引及主键信息
        LEFT JOIN 
        ( SELECT    IDXC.[object_id] ,
                    IDXC.column_id ,
                    Sort = CASE INDEXKEY_PROPERTY(IDXC.[object_id],
                                                  IDXC.index_id,
                                                  IDXC.index_column_id,
                                                  'IsDescending')
                             WHEN 1 THEN 'DESC'
                             WHEN 0 THEN 'ASC'
                             ELSE ''
                           END ,
                    PrimaryKey = CASE WHEN IDX.is_primary_key = 1 THEN N'1'ELSE N''END ,
                    IndexName = IDX.Name
          FROM      sys.indexes IDX
                    INNER JOIN sys.index_columns IDXC ON IDX.[object_id] = IDXC.[object_id]AND IDX.index_id = IDXC.index_id
                    LEFT JOIN sys.key_constraints KC ON IDX.[object_id] = KC.[parent_object_id] AND IDX.index_id = KC.unique_index_id
                    INNER JOIN -- 对于一个列包含多个索引的情况,只显示第1个索引信息
                    ( SELECT    [object_id] ,
                                Column_id ,
                                index_id = MIN(index_id)
                      FROM      sys.index_columns
                      GROUP BY  [object_id] ,
                                Column_id
                    ) IDXCUQ ON IDXC.[object_id] = IDXCUQ.[object_id]
                                AND IDXC.Column_id = IDXCUQ.Column_id
                                AND IDXC.index_id = IDXCUQ.index_id
        ) IDX ON C.[object_id] = IDX.[object_id]AND C.column_id = IDX.column_id 
-- WHERE O.name=N'要查询的表'       -- 如果只查询指定表,加上此条件
ORDER BY O.name ,C.column_id 

        

如果觉得文章对您有帮助,您可以对我进行打赏 ¥1.36 元(金额随机^_^,每次刷新金额不同)。

请使用支付宝扫码支付

留言评论

*称  呼:
*联系方式: 方便与您取得联系,推荐使用邮箱。
*内  容:

已有评论

暂无数据

上一篇:C# 自定义配置文件辅助类(WinForm使用)

下一篇:Java Post提交表单辅助类