sql得到表中的列信息
阿新 • • 發佈:2019-01-24
字符類型 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 WHEREidx.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得到表中的列信息