获取SQLServer的最完整数据字典的SQL语句

获取SQLServer 的最完整数据字典

以下代码在Microsoft SQL Server 2013中执行通过

SELECT

sysobjects.name AS 表名称 ,
--sys.extended_properties.[value] AS 表说明 ,
syscolumns.name AS 字段名称 ,
--properties.[value] AS 字段说明 ,
systypes.name AS 字段类型 ,
syscolumns.length AS 字段长度 ,
ISNULL(COLUMNPROPERTY(syscolumns.id, syscolumns.name,‘Scale‘), 0) AS 小数位数 ,

CASE WHEN syscolumns.isnullable=0
 THEN ‘‘
ELSE ‘ √ ‘
END AS 是否为空 ,
CASE WHEN syscomments.text IS NULL
 THEN ‘‘ ELSE syscomments.text
END AS 缺省值 ,
CASE WHEN COLUMNPROPERTY(syscolumns.id, syscolumns.name, ‘IsIdentity‘)= 1
 THEN ‘ √ ‘ ELSE ‘‘
END AS 递增字段 ,
CASE WHEN sysindexes.name IS NULL
 THEN ‘‘
ELSE sysindexes.name
END AS 索引名称 ,
CASE WHEN sysindexkeys.keyno IS NULL
 THEN ‘‘
ELSE CONVERT(VARCHAR(10),sysindexkeys.keyno )
END AS 索引位置 ,
CASE WHEN sysindexes.indid=1
 THEN ‘ 聚集索引 ‘
WHEN sysindexes.indid>1 AND sysindexes.indid<>255
 THEN ‘ 非聚集索引 ‘
WHEN sysindexes.indid IS NULL
 THEN ‘‘
ELSE
 ‘ 其他 ‘
END AS 索引类型 ,
CASE WHEN EXISTS
(SELECT 1
  FROM sysobjects
 WHERE xtype = ‘PK‘ AND name IN
 (SELECT name
    FROM sysindexes
   WHERE indid IN
   (SELECT indid
      FROM sysindexkeys
     WHERE id = syscolumns.id AND colid = syscolumns.colid)))
 THEN ‘ √ ‘ ELSE ‘‘
END AS 主键 ,
CASE WHEN sysforeignkeys.constid IS NULL
 THEN ‘‘
ELSE ‘ √ ‘
END AS 外健
FROM syscolumns                            -- 数据表字段
INNER JOIN sysobjects                        -- 数据对象
  ON sysobjects.id = syscolumns.id
INNER JOIN systypes                         -- 数据类型
  ON syscolumns.xtype = systypes.xtype
LEFT OUTER JOIN sys.extended_properties properties       -- 字段属性信息
  ON syscolumns.id = properties.Minor_id
 AND syscolumns.colid = properties.Minor_id
LEFT OUTER JOIN sys.extended_properties                -- 表属性信息
  ON sysobjects.id = sys.extended_properties.Minor_id
 AND sys.extended_properties.Minor_id = 0
LEFT OUTER JOIN syscomments                -- 注释信息
  ON syscolumns.cdefault = syscomments.id
LEFT OUTER JOIN sysindexkeys                -- 索引中的键或列的信息
  ON sysindexkeys.id = syscolumns.id
 AND sysindexkeys.colid = syscolumns.colid
LEFT OUTER JOIN sysindexes                  -- 数据库 索引表
  ON sysindexes.id = sysindexkeys.id
 AND sysindexes.indid = sysindexkeys.indid
LEFT OUTER JOIN sysforeignkeys
  ON sysforeignkeys.fkeyid = syscolumns.id
 AND sysforeignkeys.fkey = syscolumns.colid
WHERE (sysobjects.xtype = ‘U‘)
order by sysobjects.id,syscolumns.colid

转载于 http://blog.csdn.net/baoqiangwang/article/details/4695361

时间: 2024-08-06 07:53:26

获取SQLServer的最完整数据字典的SQL语句的相关文章

SQLSERVER 根据传入的参数拼接sql语句字符串,反馈结果集

ALTER PROCEDURE [dbo].[usp_visit_detail](@siteid BIGINT, @Startime VARCHAR(15), @Endtime  VARCHAR(15), @Aflag  INT = 10,                                    --初始值为10,非10,则表示有传入参数 @Area   VARCHAR(20) = 'N',               -- --初始值为N,非N,则表示有传入参数 @Nflag  

Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句

最近把平时在项目中常用到的数据库分页sql总结了下.大家可以贴出分页更高效的sql语句.sqlserver分页  第一种分页方法 需用到的参数:  pageSize 每页显示多少条数据  pageNumber 页数 从客户端传来  totalRecouds 表中的总记录数 select count (*) from 表名  totalPages 总页数  totalPages=totalRecouds%pageSize==0?totalRecouds/pageSize:totalRecouds/

SqlServer 中如何查看某一个Sql语句是复用了执行计划,还是重新生成了执行计划

我们知道SqlServer的查询优化器会将所执行的Sql语句的执行计划作缓存,如果后续查询可以复用缓存中的执行计划,那么SqlServer就会为后续查询复用执行计划而不是重新生成一个新的执行计划,因为复用执行计划的性能比生成执行计划的性能要高很多,所以SqlServer的这一特性可以大大提高Sql语句的执行效率.特别是对于存储过程,因为存储过程的执行计划是在存储过程第一次执行的时候生成的,存储过程的执行计划生成后就会被缓存到SqlServer的执行计划列表中,如果以后存储过程再被执行,那么存储过

查看SQLServer最耗资源时间的SQL语句

执行最慢的SQL语句 SELECT (total_elapsed_time / execution_count)/1000 N'平均时间ms' ,total_elapsed_time/1000 N'总花费时间ms' ,total_worker_time/1000 N'所用的CPU总时间ms' ,total_physical_reads N'物理读取总次数' ,total_logical_reads/execution_count N'每次逻辑读次数' ,total_logical_reads N

如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]

输入表名,生成插入语句 drop proc proc_insert //如果存在就删除 go create proc proc_insert (@tablename varchar(256)) as begin set nocount on declare @sqlstr varchar(4000) declare @sqlstr1 varchar(4000) declare @sqlstr2 varchar(4000) select @sqlstr='select ''insert '[ema

MySql查询数据字典的SQL语句

Select r.TABLE_COMMENT, t.TABLE_NAME, t.COLUMN_NAME, t.COLUMN_COMMENT, t.DATA_TYPE, t.COLUMN_TYPE, t.IS_NULLABLE, t.COLUMN_DEFAULT, t.COLUMN_KEY, t.EXTRA FROM information_schema.`COLUMNS` t, information_schema.`TABLES` r WHERE t.TABLE_NAME LIKE 'pre_

导出数据字典的SQL语句

1 导表SELECT TOP (100) PERCENT CASE WHEN a.colorder = 1 THEN d .name ELSE '' END AS 表名, CASE WHEN a.colorder = 1 THEN isnull(f.value, '') ELSE '' END AS 表说明, a.colorder AS 字段序号, a.name AS 字段名, CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 TH

sqlserver数据库,查询死锁进程SQL语句

-----查询死锁IDselect request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' ---杀死死锁 kill id 原文地址:https://blog.51cto.com/4085457/2390434

SQL语句执行与结果集的获取

title: SQL语句执行与结果集的获取 tags: [OLEDB, 数据库编程, VC++, 数据库] date: 2018-01-28 09:22:10 categories: windows 数据库编程 keywords: OLEDB, 数据库编程, VC++, 数据库,执行SQL, 获取结果集 --- 上次说到命令对象是用来执行SQL语句的.数据源在执行完SQL语句后会返回一个结果集对象,将SQL执行的结果返回到结果集对象中,应用程序在执行完SQL语句后,解析结果集对象中的结果,得到具