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 ...
随机推荐
- Servlet3.0的文件上传功能
在Servlet3.0之前,文件上传需要借助于第三方插件,在Servlet3.0之后,Servlet本身开始支持文件上传功能. 获取上传的文件可以通过HTTPServletRequest的getPar ...
- Python 递归返回树形菜单JSON串 <flask>
需求:菜单管理功能(增.删.改),多级树形菜单展示 数据库表设计 create table if not exists Menu( id serial primary key , title ) no ...
- 004 java中的变量
这篇文章为你搞懂三个问题 什么是变量? 如何使用变量? 变量命名有哪些规范? 变量 计算机的内存类似于人的大脑,电脑使用内存来存储计算所需要的数据. 内存像旅馆一样,不同的房间类型对应不同的数据类型, ...
- net 预览文件 转换文件
预览SWF文件 swfobject.js (google浏览器 会阻止 需设置) @{ ViewBag.Title = "PdfPreview"; Layout = " ...
- 2017年10月30日 vs初级教学
Console.Write("Hello World!"); / / 插入 Hello World! Console.WriteLine("Hell ...
- 面试基础(二)-mem函数
常考的函数有下面三个,memset,memcpy,memmove,一定要记住三个函数的函数原型,熟记返回值类型和参数类型,当然也不能忘记参数检查 memset #include<iostre ...
- vue1.0 与 Vue2.0的一些区别 及用法
1.Vue2.0的模板标记外必须使用元素包起来: eg:Vue1.0的写法 <!DOCTYPE html> <html> <head> <meta chars ...
- Web安全色的意义
问题: 不同的平台(Mac.PC等)有不同的调色板,不同的浏览器也有自己的调色板.这就意味着对于一幅图,显示在Mac上的Web浏览器中的图像,与它在PC上相同浏览器中显示的效果可能差别很大. 选择特定 ...
- 一次完整的HTTP事务过程
基本流程: a. 域名解析 b. 发起TCP的3次握手 c. 建立TCP连接后发起http请求 d. 服务器端响应http请求,浏览器得到html代码 e. 浏览器解析html代码,并请求html代码 ...
- SharePoint 2013 - Sideloading
默认情况下,App是不能直接部署到Production环境,只能通过App Catalog中安装. 只有在Developer类型站点中才默认激活了Developer feature. 所以如果想要使用 ...