sql server 语句获取表的描述,主键等等
sql语句添加表,字段的描述
描述类型全部设置为:MS_Description
--添加表的描述
--格式如右:execute sp_addextendedproperty 'MS_Description','字段备注信息','user','dbo','table','字段所属的表名','column','添加注释的字段名'; --添加表描述
EXECUTE sp_addextendedproperty 'C', '课程表', 'user', 'dbo', 'table', 'Course',NULL, NULL; --添加字段描述
EXECUTE sp_addextendedproperty 'MS_Description', '课程ID', 'user', 'dbo','table', 'Course', 'column', 'CourseId';
或者:右键表(列)的属性,找到扩展属性

①获取表名
--查询所有的表名称
SELECT name FROM sys.objects obj WHERE obj.type='U'; -- xtype:类型可以区分表,视图,存储过程,函数等等

②获取表的描述 sys.extended_properties 这张表存的扩展描述
SELECT obj.name 表名 ,
ds.value 描述
FROM sys.extended_properties ds
LEFT JOIN sys.objects obj ON ds.major_id = obj.object_id
WHERE ds.minor_id = 0
AND obj.name = 'Course';

最后整理:
--最后整理
SELECT obj.name,
se.value
FROM sys.objects obj
LEFT JOIN [sys].[extended_properties] se
ON obj.object_id = se.major_id
AND se.minor_id = 0
WHERE obj.type = 'U';

③获取表的主键信息
--表 sys.indexes
SELECT * FROM sys.indexes WHERE is_primary_key = 1 AND object_id =Object_Id('Course')

--最后整理
SELECT obj.name,
CAST(CASE
WHEN
(
SELECT COUNT(1) FROM sys.indexes WHERE is_primary_key = 1 AND object_id =obj.object_id
) >= 1 THEN
1
ELSE
0
END AS BIT) AS HasPrimaryKey
FROM sys.objects obj
WHERE obj.type = 'U';

④获取主键的类型和名称
--得到表的主键列id
SELECT sc.column_id
FROM sys.indexes si
INNER JOIN sys.index_columns sc
ON si.index_id = sc.index_id
AND si.object_id = sc.object_id
WHERE si.is_primary_key = 1
AND si.object_id = OBJECT_ID('Course');
--获取主键类型和名称
SELECT TOP 1
colm.name AS TablePrimarkeyType,
systype.name AS TablePrimarkeyName
FROM sys.columns colm
INNER JOIN sys.types systype
ON colm.system_type_id = systype.system_type_id
WHERE colm.object_id = OBJECT_ID('Course')
AND colm.column_id IN (
SELECT ic.column_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 obj.name,
t.TablePrimarkeyType,
t.TablePrimarkeyName
FROM sys.objects obj
OUTER APPLY
(
SELECT TOP 1
colm.name AS TablePrimarkeyType,
systype.name AS TablePrimarkeyName
FROM sys.columns colm
INNER JOIN sys.types systype
ON colm.system_type_id = systype.system_type_id
WHERE colm.object_id = obj.object_id
AND colm.column_id IN (
SELECT ic.column_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 = obj.object_id
AND idx.is_primary_key = 1
)
) t
WHERE obj.type = 'U';

⑤最终结果:
--获取表的结构 表名,拥有着,行数,是否拥有主键,表描述,表的主键,表的主键名称
SELECT obj.name Tablename,
schem.name Schemname,
idx.rows,
CAST(CASE
WHEN
(
SELECT COUNT(1)
FROM sys.indexes
WHERE object_id = obj.object_id
AND is_primary_key = 1
) >= 1 THEN
1
ELSE
0
END AS BIT) HasPrimaryKey,
b.value TableDesc,
t.*
FROM sys.objects obj
INNER JOIN sysindexes idx --行数
ON obj.object_id = idx.id
AND idx.indid <= 1
INNER JOIN sys.schemas schem --架构
ON obj.schema_id = schem.schema_id
LEFT JOIN sys.extended_properties b --描述
ON obj.object_id = b.major_id
AND b.minor_id = 0 AND b.name='MS_Description'
OUTER APPLY --主键名称和类型
(
SELECT TOP 1
colm.name AS TablePrimarkeyType,
systype.name AS TablePrimarkeyName
FROM sys.columns colm
INNER JOIN sys.types systype
ON colm.system_type_id = systype.system_type_id
WHERE colm.object_id = obj.object_id
AND colm.column_id IN (
SELECT ic.column_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 = obj.object_id
AND idx.is_primary_key = 1
)
) t
WHERE obj.type = 'U'
-- AND obj.name LIKE 'My_%'
ORDER BY obj.name;

sql server 语句获取表的描述,主键等等的更多相关文章
- 在SQL SERVER中获取表中的第二条数据
在SQL SERVER中获取表中的第二条数据, 思路:先根据时间逆排序取出前2条数据作为一个临时表,再按顺时排序在临时表中取出第一条数据 sql语句如下: select top 1 * from(se ...
- SQL SERVER中获取表间主外键关系
sql server 2008中的主外键关系获取方式: 转自:http://www.cnblogs.com/ke10/archive/2012/06/11/2544655.html SELECT OB ...
- Sql Server约束的学习一(主键约束、外键约束、唯一约束)
一.约束的分类 1.实体约束 实体约束是关于行的,比如某一行出现的值不允许出现在其他行,例如主键约束. 2.域约束 域约束是关于列的,对于所有行,某一列有那些约束,例如检查约束. 3.参照完整性约束 ...
- SQL语句建表、设置主键、外键、check、default、unique约束
· 什么是数据库? 存放数据的仓库. · 数据库和数据结构有什么区别? 数据结构要解决在内存中操作数据的问题,数据库要解决在硬盘中操作数据的问题.数据结构研究一些抽象数据模型(ADT)和以及定义在该模 ...
- sql server 2008获取表的字段注释
SELECT 表名 then d.name else '' end, 表说明 then isnull(f.value,'') else '' end, 字段序号=a.colorder, 字段名=a.n ...
- oracle&&Sqlserver获取表名列名主键及数据类型
SQlserver获得列名,列类型,列类型长度,scale,prec等数据类型(syscolumns,systypes,sysobjects均为视图) select a.name as colname ...
- SQL SERVER 2005 获取表的所有索引信息以及删除和新建语句
BEGIN WITH tx AS ( SELECT a.object_id ,b.name AS s ...
- SQL Server语句创建数据库和表——并设置主外键关系
简单的创建数据库的 SQL 语句: use master go if exists(select * from sysdatabases where name='Test') begin select ...
- MS SQL SERVER搜索某个表的主键所在的列名
原文:MS SQL SERVER搜索某个表的主键所在的列名 SELECT SYSCOLUMNS.name FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEX ...
随机推荐
- VHDL
数字逻辑VHDL 信号与变量 signal是全局的,在整个结构体中都有效,它的赋值是在进程结束, 也就是最后的赋值是有效的. variable是局部的,它的赋值是立即生效的. 一般变量是在进程的说明部 ...
- IIS7部署网站出现500.19错误(权限不足)的解决方案
错误摘要 HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息 模块 IIS Web Core 通知 未知 处理 ...
- ASP.NET 使用 AjaxPro 实现前端跟后台交互
使用 AjaxPro 进行交互,很多人都写过文章了,为什么还要继续老生常谈呢.因为有一些细节上的东西我们需要注意,因为这些细节如果不注意的话,那么程序会报错,而且维护性较差. 引言 一.首先,还是那句 ...
- Java使用UDP聊天程序
主要想测试Java UDP通信.Java UDP使用DatagramSocket和DatagramPacket完成UDP通信 主要思路: 1.本机通信,ip地址为:127.0.0.1 2.开一个线程监 ...
- C++里将string类字符串(utf-8编码)分解成单个字(可中英混输)
最近在建词典,使用Trie字典树,需要把字符串分解成单个字.由于传入的字符串中可能包含中文或者英文,它们的字节数并不相同.一开始天真地认为中文就是两个字节,于是很happy地直接判断当前位置的字符的A ...
- WinSock 重叠IO模型
title: WinSock 重叠IO模型 tags: [WinSock 模型, 网络编程, 重叠IO模型] date: 2018-06-29 20:26:13 categories: Windows ...
- mpvue自定义化后台富文本样式
最近公司写小程序开始换框架了,之前用wepy,现在用mpvue. mpvue是基于vue的写法来开发微信小程序.虽然不完全和vue一样,但是大致和vue一样,所以基本开发上是上手很快的. 现在项目进程 ...
- CSS深入理解学习笔记之padding
1.padding与容器尺寸之间的关系 对于block水平元素:①padding值暴走,一定会影响尺寸:②width非auto,padding影响尺寸:③width为auto或box-sizing为b ...
- 《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:紧凑型切片制作(Server缓存切片)
1.前言 在ArcGIS 10中出现了一种新的切片缓存文件格式:紧凑型存储(Compact).与之前的松散型存储(Exploded)相比,它有迁移方便.创建更快.减少存储空间等诸多优点,已经成为了现在 ...
- Oracle 数据库异机恢复(归档模式)
操作必须在服务器上进行(在192.168.12.71上执行) 0.按需要恢复的日期,把距恢复日期最近的全部备份和全部备份日期后的日志备份一同拷贝到需要恢复的机器上: 1.用RMAN登陆 C:\User ...