sql得到表中的列信息
Posted Sealee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\');
以上是关于sql得到表中的列信息的主要内容,如果未能解决你的问题,请参考以下文章
当没有明确的列可以加入时,如何使用另一个表中的值更新 sql 表?
Oracle SQL:根据在另一个表中给定条件的列中找到的值插入