sqlserver 获取实例上用户数据库的数据字典

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

本人自用实例

1)创建相关的字典表

use YWMonitor
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO
if 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'
GO

SET ANSI_PADDING OFF
GO

 

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

declare @dbname nvarchar(500),@sqltext nvarchar(2000)
declare  mycursor cursor for
select name from sys.databases where database_id >4 and name not in ('xxxDB') and state_desc = 'ONLINE'
open mycursor
fetch next from mycursor into @dbname
while @@FETCH_STATUS=0
begin 
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 @sqltext
exec sp_executesql @sqltext
fetch next from mycursor into @dbname
end

close mycursor
deallocate mycursor

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
注:运行程序需要Microsoft .NET Framework 2.0 支持. 更新说明(2.1.4): 1.修改数据字典排序后显示的信息. 2.增加所有按钮快捷键. 3.增加切换数据库功能. 4.修改数据字典部分界面布局. 5.修复部分功能BUG. (下个版本我会把支持SQL2000的数据字典功能更新上去) Command功能说明:(SQL查询命令) 1.支持SQL SERVER 2000、2005、2008 2.功能菜单包含新建连接、打开SQL代码、保存SQL代码、载入数据架构、切换数据库、执行编辑区代码、终止编辑区代码、分析编辑区代码、导出数据到EXCEL 3.数据架构菜单包含相关查询、添加、删除、修改SQL代码模板、 (视图、存储过程、触发器、自定义函数)代码、属性、描述等代码查询 4.代码编辑区支持SQL SERVER语法高亮 5.支持print代码执行 6.最大支持代码执行后显示5个结果,并显示相关行数。 7.数据视图支持行数据删除 8.数据视图支持列数据移动 9.代码编辑区支持选中代码执行 Document功能说明:(SQL数据字典) 1.支持SQL SERVER 2005、2008 2.功能菜单包含新建连接、载入数据架构、切换数据库、编辑描述(扩展属性)、导出数据到EXCEL 3.数据视图支持双击选中行修改描述 4.支持可快速搜索名称、描述 5.描述信息包含表名、视图名称、自定义函数名称、存储过程名称、 触发器名称、表字段、视图字段、自定义函数参数、存储过程函数参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值