导出数据字典的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 THEN ‘√‘ ELSE ‘‘ END AS 标识, CASE WHEN EXISTS 
(SELECT 1 FROM dbo.sysindexes si INNER JOIN 
dbo.sysindexkeys sik ON si.id = sik.id AND si.indid = sik.indid INNER JOIN 
dbo.syscolumns sc ON sc.id = sik.id AND sc.colid = sik.colid INNER JOIN 
dbo.sysobjects so ON so.name = so.name AND so.xtype = ‘PK‘ 
WHERE sc.id = a.id AND sc.colid = a.colid) THEN ‘√‘ ELSE ‘‘ END AS 主键, b.name AS 类型, a.length AS 长度, COLUMNPROPERTY(a.id, a.name, 
‘PRECISION‘) AS 精度, ISNULL(COLUMNPROPERTY(a.id, a.name, ‘Scale‘), 0) AS 小数位数, 
CASE WHEN a.isnullable = 1 THEN ‘√‘ ELSE ‘‘ END AS 允许空, ISNULL(e.text, ‘‘) AS 默认值, ISNULL(g.value, ‘‘) AS 字段说明, d.crdate AS 创建时间, 
CASE WHEN a.colorder = 1 THEN d .refdate ELSE NULL END AS 更改时间 
FROM dbo.syscolumns AS a LEFT OUTER JOIN 
dbo.systypes AS b ON a.xtype = b.xusertype INNER JOIN 
dbo.sysobjects AS d ON a.id = d.id AND d.xtype = ‘U‘  AND d.status >= 0 LEFT OUTER JOIN 
dbo.syscomments AS e ON a.cdefault = e.id LEFT OUTER JOIN 
sys.extended_properties AS g ON a.id = g.major_id AND a.colid = g.minor_id LEFT OUTER JOIN 
sys.extended_properties AS f ON d.id = f.major_id AND f.minor_id = 0 
ORDER BY d.name, 字段序号

2 导索引
SELECT TOP 100 PERCENT --a.id, 
CASE WHEN b.keyno = 1 THEN c.name ELSE ‘‘ END AS 表名, 
CASE WHEN b.keyno = 1 THEN a.name ELSE ‘‘ END AS 索引名称, d.name AS 列名, 
b.keyno AS 索引顺序, CASE indexkey_property(c.id, b.indid, b.keyno, ‘isdescending‘) 
WHEN 1 THEN ‘降序‘ WHEN 0 THEN ‘升序‘ END AS 排序, CASE WHEN p.id IS NULL 
THEN ‘‘ ELSE ‘√‘ END AS 主键, CASE INDEXPROPERTY(c.id, a.name, ‘IsClustered‘) 
WHEN 1 THEN ‘√‘ WHEN 0 THEN ‘‘ END AS 聚集, CASE INDEXPROPERTY(c.id, 
a.name, ‘IsUnique‘) WHEN 1 THEN ‘√‘ WHEN 0 THEN ‘‘ END AS 唯一, 
CASE WHEN e.id IS NULL THEN ‘‘ ELSE ‘√‘ END AS 唯一约束, 
a.OrigFillFactor AS 填充因子, c.crdate AS 创建时间, c.refdate AS 更改时间 
FROM dbo.sysindexes a INNER JOIN 
dbo.sysindexkeys b ON a.id = b.id AND a.indid = b.indid INNER JOIN 
dbo.syscolumns d ON b.id = d.id AND b.colid = d.colid INNER JOIN 
dbo.sysobjects c ON a.id = c.id AND c.xtype = ‘U‘ LEFT OUTER JOIN 
dbo.sysobjects e ON e.name = a.name AND e.xtype = ‘UQ‘ LEFT OUTER JOIN 
dbo.sysobjects p ON p.name = a.name AND p.xtype = ‘PK‘ 
WHERE (OBJECTPROPERTY(a.id, N‘IsUserTable‘) = 1) AND (OBJECTPROPERTY(a.id, 
N‘IsMSShipped‘) = 0) AND (INDEXPROPERTY(a.id, a.name, ‘IsAutoStatistics‘) = 0) 
ORDER BY c.name, a.name, b.keyno

3 导出主\外键\约束\试图等对象 
SELECT DISTINCT 
TOP 100 PERCENT o.xtype, 
CASE o.xtype WHEN ‘X‘ THEN ‘扩展存储过程‘ WHEN ‘TR‘ THEN ‘触发器‘ WHEN ‘PK‘ THEN 
‘主键‘ WHEN ‘F‘ THEN ‘外键‘ WHEN ‘C‘ THEN ‘约束‘ WHEN ‘V‘ THEN ‘视图‘ WHEN ‘FN‘ 
THEN ‘函数-标量‘ WHEN ‘IF‘ THEN ‘函数-内嵌‘ WHEN ‘TF‘ THEN ‘函数-表值‘ ELSE ‘存储过程‘ 
END AS 类型, o.name AS 对象名, o.crdate AS 创建时间, o.refdate AS 更改时间, 
c.text AS 声明语句 
FROM dbo.sysobjects o LEFT OUTER JOIN 
dbo.syscomments c ON o.id = c.id 
WHERE (o.xtype IN (‘X‘, ‘TR‘, ‘C‘, ‘V‘, ‘F‘, ‘IF‘, ‘TF‘, ‘FN‘, ‘P‘, ‘PK‘)) AND 
(OBJECTPROPERTY(o.id, N‘IsMSShipped‘) = 0) 
ORDER BY CASE o.xtype WHEN ‘X‘ THEN ‘扩展存储过程‘ WHEN ‘TR‘ THEN ‘触发器‘ WHEN 
‘PK‘ THEN ‘主键‘ WHEN ‘F‘ THEN ‘外键‘ WHEN ‘C‘ THEN ‘约束‘ WHEN ‘V‘ THEN ‘视图‘ 
WHEN ‘FN‘ THEN ‘函数-标量‘ WHEN ‘IF‘ THEN ‘函数-内嵌‘ WHEN ‘TF‘ THEN ‘函数-表值‘ 
ELSE ‘存储过程‘ END DESC

4 导出索引的碎片率

DECLARE @db_name VARCHAR(256)
SET @db_name=‘MyDB‘ --数据库名
SELECT db_name(a.database_id) [db_name],c.name [table_name], b.name [index_name], a.avg_fragmentation_in_percent 
FROM sys.dm_db_index_physical_stats (DB_ID(@db_name), NULL,NULL, NULL, ‘Limited‘) AS a 
 JOIN sys.indexes AS b  ON a.object_id = b.object_id 
  AND a.index_id = b.index_id 
 JOIN sys.tables AS c ON a.object_id = c.object_id
WHERE a.index_id>0 
 AND a.avg_fragmentation_in_percent>50

5 触发器

select   a.name as [Table],b.name as [Trigger]
from   sysobjects   a   ,   sysobjects   b   
where   a.id   =   b.parent_obj  and   a.xtype   =   ‘u‘   and   b.xtype   =   ‘tr‘

6. 查询数据库表的所有外键信息 

SELECT 主键表名称=object_name(b.rkeyid)
,主键列ID=b.rkey 
,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid) 
,外键表ID=b.fkeyid 
,外键表名称=object_name(b.fkeyid) 
,外键列ID=b.fkey 
,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid) 
,级联更新=ObjectProperty(a.id,‘CnstIsUpdateCascade‘) 
,级联删除=ObjectProperty(a.id,‘CnstIsDeleteCascade‘) 
FROM sysobjects a 
join sysforeignkeys b on a.id=b.constid 
join sysobjects c on a.parent_obj=c.id 
WHERE a.xtype=‘F‘ AND c.xtype=‘U‘

时间: 2024-10-13 16:37:39

导出数据字典的SQL语句的相关文章

MSSQL数据库导入导出大全二(SQL语句)

Excel文件导入数据库多个Sheet if exists(select 1 from sysobjects where name=N'p_import_excel' and type='P')drop proc p_import_excelgo--调用示例exec p_import_excel 'c:\123.xls','Sheet1;Sheet2;Sheet3','tbl'create proc p_import_excel@excfilename nvarchar(100),--文件路径@

获取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(CO

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_

Oracle中的表构造导出到word Sql语句

select * from ( SELECT t1.Table_Name AS "表名称", t3.comments AS "表说明", t1.Column_Name AS "字段名称", t1.Data_Type AS "数据类型", t1.Data_Length AS "长度", t1.NullAble AS "是否为空", t2.Comments AS "字段说明&quo

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

SQL Server2012使用导入和导出向导时,用sql语句作为数据源,出现数据源类型会变成202或者203

用MS SqlServer2012进行数据导出时,使用的查询语句导出,但是出现了错误: "发现 xx个未知的列类型转换您只能保存此包" 点击列查看详细错误信息时,可以看到: [源信息]源位置: 192.168.1.97源提供程序: SQLNCLI11表: [查询]列: ItemSize列类型: 203SSIS 类型: (类型未知...)映射文件(到 SSIS 类型): C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Mapping

Visio2010建立ER图并直接导出为SQL语句

Visio2010建立ER图并直接导出为SQL语句 2013年08月20日 ⁄ 综合 ⁄ 共 2581字 ⁄ 字号 小 中 大 ⁄ 评论关闭 建立数据库时我们需要考虑数据之间的关系,为了理清数据之间的关系我们需要对数据进行统一的整理.对于较复杂的数据库我们需要建立数据库模型,具体可分为两步:首先对数据库进行结构分析并使用树.表等描述数据,然后分析数据库的操作方法,规定数据库的增删改查操作,这两个步骤就构成了我们通常所说的数据库模型. 数据库模型有多重分类,通常所说的ER图是图模型,除此之外还有层

SQL 导出数据字典

用于参考: SELECT       表名=case   when   a.colorder=1   then   d.name   else   ''   end,     表说明=case   when   a.colorder=1   then   isnull(f.value,'')   else   ''   end,     字段序号=a.colorder,     字段名=a.name,       主键=case   when   exists(SELECT   1   FROM

如何将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