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');
  • 相关阅读:
    oracle改表语句
    pr视频过渡效果
    远程桌面连接
    kill-power
    Leetcode 466.统计重复个数
    Leetcode 464.我能赢吗
    Leetcode 462.最少移动次数使数组元素相等
    Leetcode 459.重复的子字符串
    Leetcode 458.可怜的小猪
    Leetcode 457.环形数组循环
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/10312083.html
Copyright © 2011-2022 走看看