sql server 语句获取表的描述,主键等等

sql语句添加表,字段的描述

--添加表的描述
--格式如右: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  sysobjects WHERE  xtype = ‘u‘; -- xtype:类型可以区分表,视图,存储过程,函数等等

②获取表的描述  sys.extended_properties  这张表存的扩展描述

--查询表的描述
SELECT  tbs.name 表名 ,
        ds.value 描述
FROM    sys.extended_properties ds
        LEFT JOIN sysobjects tbs ON ds.major_id = tbs.id
WHERE   ds.minor_id = 0
        AND tbs.name = ‘Course‘;

最后整理:

--表和描述
SELECT sb.name,
       se.value
FROM sysobjects sb
    LEFT JOIN [sys].[extended_properties] se
        ON sb.id = se.major_id
           AND se.minor_id = 0
WHERE sb.xtype = ‘U‘;

③获取表的主键信息

--获取主键字段  sysindexkeys
SELECT   * FROM SysColumns WHERE id=Object_Id(‘Course‘) and colid=(select TOP 1 keyno from sysindexkeys WHERE id=Object_Id(‘Course‘));

--表 sys.indexes
SELECT * FROM sys.indexes  WHERE is_primary_key = 1   AND object_id =Object_Id(‘Course‘)

--最后整理
SELECT sb.name,
       CAST(CASE
                WHEN
                (
                    SELECT COUNT(1) FROM sysindexkeys sk WHERE sk.id = sb.id
                ) >= 1 THEN
                    1
                ELSE
                    0
            END AS BIT) AS HasPrimaryKey
FROM sysobjects sb
WHERE sb.type = ‘U‘;

④获取主键的类型和名称

第3步的上面进行扩展

SELECT sc.name [Name],st.name [Type]   FROM SysColumns sc   LEFT JOIN systypes st
        ON sc.xtype = st.xtype WHERE id=Object_Id(‘Course‘) AND
colid=(select TOP 1 keyno from sysindexkeys WHERE id=Object_Id(‘Course‘));

 --整理
SELECT sb.name,
       sc.name [ColumnName],
       st.name [ColumnType]
FROM sysobjects sb
    LEFT JOIN syscolumns sc
        ON sc.id = sb.id
           AND sc.colid =
           (
               SELECT TOP 1 keyno FROM sysindexkeys WHERE id = sb.id
           )
    LEFT JOIN systypes st
        ON sc.xtype = st.xtype
WHERE sb.type = ‘U‘;

或者:

----查询该表中的所有列的类型和名称以及id
SELECT
    b.name AS [Type],
    a.name AS [Name],
    a.colid
FROM syscolumns a
    INNER JOIN systypes b
        ON a.xtype = b.xtype
WHERE id = OBJECT_ID(‘Course‘) AND b.name!=‘sysname‘; 

--得到表的主键列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 sb.name,
       t.Name,
       t.Type
FROM sysobjects sb
    OUTER APPLY
(
    SELECT b.name AS [Type],
           a.name AS [Name]
    FROM syscolumns a
        INNER JOIN systypes b
            ON a.xtype = b.xtype
    WHERE id = sb.id
          AND a.colid IN (   --得到主键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 = sb.id
                         )
) t
WHERE sb.type = ‘U‘;

⑤最终结果:

--查询表名,行数,表注释,主键名,主键类型,是否有主键  可以根据自己要的进行更改
SELECT sb.name Tablename,
       idx.rows,
       se.value TableDesc,
       sc.name TablePrimarkeyName,
       st.name TablePrimarkeyType,
       CAST(CASE
                WHEN
                (
                    SELECT COUNT(1) FROM sysindexkeys sk WHERE sk.id = sb.id
                ) >= 1 THEN
                    1
                ELSE
                    0
            END AS BIT) AS HasPrimaryKey
FROM sysobjects sb
    LEFT JOIN sys.extended_properties se
        ON sb.id = se.major_id
           AND se.minor_id = 0
    LEFT JOIN syscolumns sc
        ON sc.id = sb.id
           AND sc.colid =
           (
               SELECT TOP 1 keyno FROM sysindexkeys WHERE id = sb.id
           )
    LEFT JOIN systypes st
        ON sc.xtype = st.xtype
    INNER JOIN dbo.sysindexes idx
        ON sb.id = idx.id
           AND idx.indid <= 1
WHERE sb.xtype = ‘U‘;

原文地址:https://www.cnblogs.com/Sea1ee/p/10306786.html

时间: 2024-11-08 03:02:03

sql server 语句获取表的描述,主键等等的相关文章

oracle&amp;&amp;Sqlserver获取表名列名主键及数据类型

SQlserver获得列名,列类型,列类型长度,scale,prec等数据类型(syscolumns,systypes,sysobjects均为视图) select a.name as colname, b.name as typename,a.length as length,a.scale as scale,a.prec as prec from syscolumns a,systypes b ,sysobjects c where a.xusertype=b.xusertype and a

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

sql server 2008中的主外键关系获取方式: 转自:http://www.cnblogs.com/ke10/archive/2012/06/11/2544655.html SELECT OBJECT_NAME(con.constid) '关系名' ,OBJECT_NAME(sf.fkeyid) '主键表' ,fcol.name '主键' ,OBJECT_NAME(sf.rkeyid) '外键表' ,rcol.name '外键',st.name'数据类型'FROM sysforeignk

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

· 什么是数据库? 存放数据的仓库. · 数据库和数据结构有什么区别? 数据结构要解决在内存中操作数据的问题,数据库要解决在硬盘中操作数据的问题.数据结构研究一些抽象数据模型(ADT)和以及定义在该模型上的一些操作,数据库是由表.关系.操作组成. · 什么是主键? 主键用来标识记录的唯一性. · 什么是外键? 外键用来标识表与表之间的联系. · 什么是check约束? check约束限制了输入值的范围. · 什么是default约束? 给某个属性一个默认值. · 什么是unique约束? 限制某

sql server 2008获取表的字段注释

1 SELECT 2 表名=case when a.colorder=1 then d.name else '' end, 3 表说明=case when a.colorder=1 then isnull(f.value,'') else '' end, 4 字段序号=a.colorder, 5 字段名=a.name, 6 标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end, 7 主键=case

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

BEGIN        WITH tx AS        (                SELECT a.object_id                      ,b.name AS schema_name                      ,a.name AS table_name                      ,c.name as ix_name                      ,c.is_unique AS ix_unique          

SQL server 语句创建表

use uer --纸箱当前所操作的数据库go--创建商品类别表create table Commoditysort (SortId int IDENTITY(1,1) NOT NULL,--类别IDSortName varchar(50) NOT NULL --类别名称)go --商品信息表 use uergocreate table CommodityInfo( CommodityID int IDENTITY(1,1) NOT NULL,--商品的ID Sortid int NOT NUL

SQL Server三种表连接原理

http://msdn.microsoft.com/zh-cn/library/dn144699.aspx 简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge Join,Hash Join这三种物理连接中的一种.理解这三种物理连接是理解在表连接时解决性能问题的基础,下面我来对这三种连接的原理,适用场景进行描述. 嵌套循环连接(Nested Loop J

SQL server 数据库用户表名称

转自(http://blog.163.com/jlj_sk/blog/static/22579293200861422833924/) 取得SQL server 数据库中 所有用户表名称 select name from sysobjects where xtype='U' order by name SQL server数据库系统表详解: sysaltfiles 主数据库 保存数据库的文件 syscharsets 主数据库字符集与排序顺序 sysconfigures主数据库 配置选项 sysc

Sql Server删除数据表中重复记录 三种方法

本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1.生成一张临时表new_users,表结构与users表一样:2.对users表按id做一个循环,每从users表中读出一个条记录,判断new_users中是否存在有相同的u_name,如果没有,则把它插入新表:如果已经有了相同的项,则忽略此条记录:3.把users表改为其它的名称,把new_use