zoukankan      html  css  js  c++  java
  • sql得到表中的列信息

    取列全部用的 sys. 中的表

    CTE:WITH name AS() 用法:   sql树形查询

    ①主键信息 

    SELECT ic.column_id,
           ic.index_column_id,
           ic.object_id
    FROM sys.indexes idx
        INNER JOIN sys.index_columns ic
            ON idx.index_id = ic.index_id
               AND idx.object_id = ic.object_id
    WHERE idx.object_id = OBJECT_ID('Course')
          AND idx.is_primary_key = 1;

     ②改表中的列

    SELECT *
    FROM sys.columns colm
        INNER JOIN sys.types systype
            ON colm.system_type_id = systype.system_type_id
               AND systype.user_type_id = colm.user_type_id   --这两个条件过滤得到用户创建的列
    WHERE colm.object_id = OBJECT_ID('Course'); 

    ③最终sql语句:

    WITH indexCTE
    AS (SELECT ic.column_id,
               ic.index_column_id,
               ic.object_id
        FROM sys.indexes idx
            INNER JOIN sys.index_columns ic
                ON idx.index_id = ic.index_id
                   AND idx.object_id = ic.object_id
        WHERE idx.object_id = OBJECT_ID('Course')   --找到该表的主键信息
              AND idx.is_primary_key = 1)
    SELECT colm.column_id ColumnID,                 --列id
           CAST(CASE
                    WHEN indexCTE.column_id IS NULL THEN
                        0
                    ELSE
                        1
                END AS BIT) IsPrimaryKey,
           colm.name ColumnName,                    --列名称
           systype.name ColumnType,                 --列类型
           colm.is_identity IsIdentity,             --是否自增长
           colm.is_nullable IsNullable,             --是否为空
           CAST(colm.max_length AS INT) ByteLength, -- sys.columns中的max_length是字节
           (CASE
                WHEN systype.name = 'nvarchar'
                     AND colm.max_length > 0 THEN
                    colm.max_length / 2
                WHEN systype.name = 'nchar'
                     AND colm.max_length > 0 THEN
                    colm.max_length / 2
                WHEN systype.name = 'ntext'
                     AND colm.max_length > 0 THEN
                    colm.max_length / 2
                ELSE
                    colm.max_length
            END
           ) CharLength,                            --得到字符类型长度
           CAST(colm.precision AS INT) Precision,
           CAST(colm.scale AS INT) Scale,
           sep.value Remark  --列描述
    FROM sys.columns colm
        INNER JOIN sys.types systype  
            ON colm.system_type_id = systype.system_type_id
               AND systype.user_type_id = colm.user_type_id   --通过两个关联进行过滤得到用户创建的类型
        LEFT JOIN sys.extended_properties sep   
            ON sep.major_id = colm.object_id  --得到是这个表的
               AND colm.column_id = sep.minor_id   --这列的
        LEFT JOIN indexCTE
            ON indexCTE.column_id = colm.column_id
               AND indexCTE.object_id = colm.object_id 
    WHERE colm.object_id = OBJECT_ID('Course');
  • 相关阅读:
    web开发发送短信实现最简单的接口
    2分钟学会ajax 入门ajax必备
    基于注册登陆简单的使用django认证系统
    Django 发送邮件
    关于python开始写项目创建一个虚拟环境
    pycharm使用bootstrap组件方法
    linux安装配置python环境以及虚拟环境和django下载
    luffy项目搭建流程(Django前后端分离项目范本)
    python微信服务号关注授权、消息推送流程
    Celery—分布式的异步任务处理系统
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/10312083.html
Copyright © 2011-2022 走看看