1. 程式人生 > >sql得到表中的列信息

sql得到表中的列信息

字符類型 http 是否 字符 else exc nbsp max nor

取列全部用的 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);

sql得到表中的列信息