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

本人自用实例

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

sqlserver 获取实例上用户数据库的数据字典的更多相关文章

  1. sqlserver 获取当前操作的数据库名称

    Select Name From Master..SysDataBases Where DbId=(Select Dbid From Master..SysProcesses Where Spid = ...

  2. Oracle 数据库、实例、用户、表空间、表之间的关系

    数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库. ...

  3. 分享知识-快乐自己: Oracle数据库实例、用户、表、表空间之间关系

    数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件). 其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库 ...

  4. 渗透测试环境搭建以及使用sqlmap获取mysql用户数据库密码

    通过sqlmap检测sql注入漏洞 安装SQLmap漏洞查看工具 安装渗透测试演练系统DVWA 使用SQLmap进行sql注入并获得后台管理员adnim帐号和密码 环境介绍 安装SQLmap:Rich ...

  5. oracle数据库_实例_用户_表空间之间的关系(转)

    数据库:Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库.可 ...

  6. sqlserver获取数据库表结构

    SqlServer获取所有数据库,表,表结构 --获取所有数据库 SELECT * FROM Master..SysDatabases ORDER BY Name --获取test数据库下所有表 us ...

  7. SQLServer: 解决“错误15023:当前数据库中已存在用户或角色

    解决SQL Server 2008 错误15023:当前数据库中已存在用户或角色,SQLServer2008,错误15023, 在使用SQL Server 2008时,我们经常会遇到一个情况:需要把一 ...

  8. SqlServer 由于未在SqlServer的此实例上安装复制组件解决方法

    sqlserver2005在复制订阅时出现: “由于未在SqlServer的此实例上安装复制组件,Microsoft SQL server 无法访问这些组件,请参阅SQL Server……” 解决方法 ...

  9. 基础概念:Oracle数据库、实例、用户、表空间、表之间的关系

    基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库 ...

随机推荐

  1. Dart编程实例 - 第一个Dart程序

    Dart编程实例 - 第一个Dart程序 main() { print("Hello World!"); } 本文转自:http://codingdict.com/article/ ...

  2. unittest框架学习笔记二之discover

    coding=utf-8'''Created on 2018/3/29 author:star Project:discover测试用例''' import unittest,time,oslist= ...

  3. 网络错误修复工具:Network Fault Repair Tool Build20160414

    ::请勿轻易修改此文件,以避免不可预知的错误 gwsbhqt@163.com @echo off color 0A setlocal enabledelayedexpansion title Netw ...

  4. python 多设备同时安装app包

    python  多设备同时安装app包 上代码 #!/usr/bin/env python # -*- encoding: utf-8 -*- import os import time from m ...

  5. delphi基础篇之数据类型之三:3.结构类型(Struct)

    3.结构类型(Struct) 结构类型在内存中存储一组相关的数据项,而不是像简单数据类型那样单一的数值.结构数据类型包括:集合类型.数组类型.记录类型.文件类型.类类型.类引用类型和接口类型等.

  6. struts基础

    六个基本包 struts2-core-2.1.6.jar :开发的核心类库 freemarker-2.3.13.jar :struts2的UI标签的模板使用freemarker编写 commons-l ...

  7. <软件测试>软件测试

    1.软件测试基础 软件测试工程师:查找错误和缺陷,然后要求开发人员进行修改,保证软件质量. 漏洞(360安全漏洞):硬件,软件,协议的具体实现或系统安全策略存在缺陷,从而可以使攻击者在未授权的情况下破 ...

  8. 问题1-/usr/bin/python: No module named virtualenvwrapper

    操作系统:Ubuntu 问题:创建虚拟环境时,出现:/usr/bin/python: No module named virtualenvwrapper 解决方法: 1.切换到用户家目录 2.打开隐藏 ...

  9. C语言结构体嵌套

    #include <stdio.h> int main() { /*************************************************** *结构体嵌套:结构 ...

  10. 使用jQuery的datetimepicker插件

    因为后台系统要使用年月日时分的设置,又因为使用的Bootstrap框架只有datepicker和timepicker控件.所以在jQuery库中找到轻量级的datetimepicker插件,很好地解决 ...