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 语句获取表的描述,主键等等的更多相关文章

  1. 在SQL SERVER中获取表中的第二条数据

    在SQL SERVER中获取表中的第二条数据, 思路:先根据时间逆排序取出前2条数据作为一个临时表,再按顺时排序在临时表中取出第一条数据 sql语句如下: select top 1 * from(se ...

  2. SQL SERVER中获取表间主外键关系

    sql server 2008中的主外键关系获取方式: 转自:http://www.cnblogs.com/ke10/archive/2012/06/11/2544655.html SELECT OB ...

  3. Sql Server约束的学习一(主键约束、外键约束、唯一约束)

    一.约束的分类 1.实体约束 实体约束是关于行的,比如某一行出现的值不允许出现在其他行,例如主键约束. 2.域约束 域约束是关于列的,对于所有行,某一列有那些约束,例如检查约束. 3.参照完整性约束 ...

  4. SQL语句建表、设置主键、外键、check、default、unique约束

    · 什么是数据库? 存放数据的仓库. · 数据库和数据结构有什么区别? 数据结构要解决在内存中操作数据的问题,数据库要解决在硬盘中操作数据的问题.数据结构研究一些抽象数据模型(ADT)和以及定义在该模 ...

  5. sql server 2008获取表的字段注释

    SELECT 表名 then d.name else '' end, 表说明 then isnull(f.value,'') else '' end, 字段序号=a.colorder, 字段名=a.n ...

  6. oracle&&Sqlserver获取表名列名主键及数据类型

    SQlserver获得列名,列类型,列类型长度,scale,prec等数据类型(syscolumns,systypes,sysobjects均为视图) select a.name as colname ...

  7. SQL SERVER 2005 获取表的所有索引信息以及删除和新建语句

    BEGIN        WITH tx AS        (                SELECT a.object_id                      ,b.name AS s ...

  8. SQL Server语句创建数据库和表——并设置主外键关系

    简单的创建数据库的 SQL 语句: use master go if exists(select * from sysdatabases where name='Test') begin select ...

  9. MS SQL SERVER搜索某个表的主键所在的列名

    原文:MS SQL SERVER搜索某个表的主键所在的列名 SELECT SYSCOLUMNS.name  FROM SYSCOLUMNS,SYSOBJECTS,SYSINDEXES,SYSINDEX ...

随机推荐

  1. JS中彻底删除json对象组成的数组中的元素

    只是分享一个小知识~ 在JS中,对于某个由json对象组成的数组,例如: var test = [{ "a": "1", "b": &quo ...

  2. [LeetCode]24. Swap Nodes in Pairs两两交换链表中的节点

    Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2->3 ...

  3. 服务器word权限添加

    我们的程序部署到IIS上会出现上图所示的错误. 这个是由于IIS没有权限访问word所致.   解决的方法: 在运行对话框中输入: mmc -32 出来如下图的界面:   然后点击"文件&q ...

  4. webpack缓存

    缓存 缓存如何工作 1.当缓存客户端需要访问数据时,它首先检查缓存.当在缓存中找到所请求的数据时,它被称为缓存命中. 2.如果在缓存中找不到请求的数据 , 称为缓存未命中的情况,它将从主存储器中提取并 ...

  5. Javascript: hash tables in javascript

    /** * Copyright 2010 Tim Down. * * Licensed under the Apache License, Version 2.0 (the "License ...

  6. 03_Redis数据类型(List)

    [List类型] Redis采用的是LinkedList. ArrayList: 数组存储.查询快,增删慢. LinkedList:链表存储.增删快,查询慢,查询两端快. Redis的list内部采用 ...

  7. Multidex (方法数超过限制的处理)

    报错 : Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536 ...

  8. SQL 出现18456

    SQL Server 2008R2 18456错误解决方案   SQL Server 2008R2 18456错误解决方案 微软解释说,因密码或用户名错误而使身份验证失败并导致连接尝试被拒时,类似下面 ...

  9. matlab中repmat函数的用法(堆叠矩阵)

    matlab中repmat函数的用法 B = repmat(A,m,n) B = repmat(A,[m n]) B = repmat(A,[m n p...]) 这是一个处理大矩阵且内容有重复时使用 ...

  10. mvc页面间的传值

    本文大致讲解mvc前后端的传值方式,包括control向view.view向control.以及action向action. 回顾 我们回顾下在ASP.NET WebForms中,页面之间最常用的传值 ...