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

本人自用实例

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. HTML5 worker计数器简单示例

    效果图: index.html var w; // 开始 function startWorker() { if (typeof (Worker) !== "undefined") ...

  2. CSS3布局篇(多列布局)

    我们通过学习 CSS3,能够创建多个列来对文本进行布局 ,就像报纸那样排版那样! 可以参考详细说明:http://www.w3school.com.cn/css3/css3_multiple_colu ...

  3. 【hihocoder 1554】最短的 Nore0061

    [链接]http://hihocoder.com/problemset/problem/1554 [题意] 中文题 [题解] DP; 设f[i][j][k]表示前i个字符,第一个串已经得到了前j个字符 ...

  4. 强制位(set uid和set gid)与冒险位(sticky)的作用都有什么

    1.set uid(强制位) 只能对文件进行设置 通过对文件设置uid可以使非文件拥有者或文件所属群组的用户具有执行该文件的权限. 例如ping,默认情况下所有用户都可以使用此命令,但当我们查看pin ...

  5. NX二次开发-NXOpen::CoordinateSystemCollection Class Reference

    NX11+VS2013 #include <NXOpen/Section.hxx> #include <NXOpen/SectionCollection.hxx> #inclu ...

  6. 搭建本地 8.8 W 乌云漏洞库

    这个是关于两个图片马的帖子. https://zhuanlan.zhihu.com/p/27486144 这个是开源地址: https://github.com/m0l1ce/wooyunallbug ...

  7. mybatis的核心对象图解

  8. 学习MFC创建界面

    原始学习文章地址: http://blog.csdn.net/chenyusiyuan/article/details/4744097 一.创建MFC 首先创建一个MFC对话框应用程序(Dialog- ...

  9. matlab中的 ndims(a)、length(a)、size(a) 分别是什么意思?

    size(a)表示矩阵每个维度的长度比如size([1 2 3;4 5 6])等于[2 3]表示他有2行3列size([1 2 3])等于[1 3]表示他有1行3列另外size(a,n)表示矩阵a在第 ...

  10. 杂项:SVN -u

    ylbtech-杂项:SVN 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶部   10 ...