博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sqlserver 获取实例上用户数据库的数据字典
阅读量:4961 次
发布时间:2019-06-12

本文共 3172 字,大约阅读时间需要 10 分钟。

原理很简单:将获取数据字典信息(通过动态视图获取)存入到目标表(数据字典表)中即可。

本人自用实例

1)创建相关的字典表

use YWMonitorGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOif not exists (select * from dbo.sysobjects where id = object_id('Data_dictionary'))    begin        CREATE TABLE [dbo].[Data_dictionary](            [code] int identity(1,1) primary key ,            [库名] [varchar](100) NULL,            [表名] [varchar](100) NULL,            [表说明] [sql_variant] NULL,            [字段序号] int NULL,            [字段名] [varchar](100) NULL,            [标识] [varchar](100) NULL,            [主键] [varchar](100) NULL,            [类型] [varchar](50) NULL,            [占用字节数] int NULL,            [长度] int NULL,            [小数位数] int NULL,            [允许空] [varchar](100) NULL,            [默认值] [varchar](100) NULL,            [字段说明] [sql_variant] NULL,            [更新时间] [datetime] not NULL        ) ON [PRIMARY]    end    else        print 'exists'GOSET ANSI_PADDING OFFGO

 

2)将获取的字典信息录入表中

declare @dbname nvarchar(500),@sqltext nvarchar(2000)declare  mycursor cursor forselect name from sys.databases where database_id >4 and name not in ('xxxDB') and state_desc = 'ONLINE'open mycursorfetch next from mycursor into @dbnamewhile @@FETCH_STATUS=0begin set @sqltext= 'use ['+@dbname+']INSERT INTO [YWMonitor].[dbo].[Data_dictionary]           ([库名]           ,[表名]           ,[表说明]           ,[字段序号]           ,[字段名]           ,[标识]           ,[主键]           ,[类型]           ,[占用字节数]           ,[长度]           ,[小数位数]           ,[允许空]           ,[默认值]           ,[字段说明]           ,[更新时间])SELECT          库名 = '''+@dbname+''',    表名= d.name   ,    表说明=case   when   a.colorder=1   then  isnull(f.value,'''')   else   ''''  end,          字段序号=a.colorder,          字段名=a.name,          标识=case   when   COLUMNPROPERTY(   a.id,a.name,''IsIdentity'')=1   then  ''√''else   ''''  end,          主键=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   =   a.id  AND   colid=a.colid          )))   then  ''√''  else   ''''   end,          类型=b.name,          占用字节数=a.length,          长度=COLUMNPROPERTY(a.id,a.name,''PRECISION''),          小数位数=isnull(COLUMNPROPERTY(a.id,a.name,''Scale''),0),          允许空=case   when   a.isnullable=1   then  ''√''else   ''''  end,          默认值=isnull(e.text,''''),          字段说明=isnull(g.[value],''''),  更新时间= getdate()           FROM  syscolumns   a          left  join   systypes   b   on   a.xtype=b.xusertype          inner  join   sysobjects   d   on   a.id=d.id    and   d.xtype=''U''   and    d.name<>''dtproperties''         left  join   syscomments   e   on   a.cdefault=e.id          left  join   sys.extended_properties g   on  a.id=g.major_id   and   a.colid=g.minor_id                 left  join   sys.extended_properties f   on  d.id=f.major_id   and   f.minor_id  =0            where d.name not like ''%20%''   order  by   a.id,a.colorder '--print @sqltextexec sp_executesql @sqltextfetch next from mycursor into @dbnameendclose mycursordeallocate mycursor

 

转载于:https://www.cnblogs.com/lx823706/p/6274369.html

你可能感兴趣的文章
边框圆角Css
查看>>
使用Busybox制作根文件系统
查看>>
jpg图片在IE6、IE7和IE8下不显示解决办法
查看>>
delphi之模糊找图
查看>>
Javascript模块化编程的写法
查看>>
大华门禁SDK二次开发(二)-SignalR应用
查看>>
oracle 使用job定时自动重置sequence
查看>>
集成百度推送
查看>>
在项目中加入其他样式
查看>>
在使用Kettle的集群排序中 Carte的设定——(基于Windows)
查看>>
【原】iOS中KVC和KVO的区别
查看>>
OMAPL138学习----DSPLINK DEMO解析之SCALE
查看>>
IoC的基本概念
查看>>
restframework CBV试图的4种方式
查看>>
大图居中,以1920px为例
查看>>
Python3 图片转字符画
查看>>
[C陷阱和缺陷] 第7章 可移植性缺陷
查看>>
人需要治愈
查看>>
linux中configure文件默认执行结果所在位置
查看>>
Windows向Linux上传文件夹
查看>>