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
sqlserver 获取实例上用户数据库的数据字典的更多相关文章
- sqlserver 获取当前操作的数据库名称
Select Name From Master..SysDataBases Where DbId=(Select Dbid From Master..SysProcesses Where Spid = ...
- Oracle 数据库、实例、用户、表空间、表之间的关系
数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库. ...
- 分享知识-快乐自己: Oracle数据库实例、用户、表、表空间之间关系
数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件). 其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库 ...
- 渗透测试环境搭建以及使用sqlmap获取mysql用户数据库密码
通过sqlmap检测sql注入漏洞 安装SQLmap漏洞查看工具 安装渗透测试演练系统DVWA 使用SQLmap进行sql注入并获得后台管理员adnim帐号和密码 环境介绍 安装SQLmap:Rich ...
- oracle数据库_实例_用户_表空间之间的关系(转)
数据库:Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库.可 ...
- sqlserver获取数据库表结构
SqlServer获取所有数据库,表,表结构 --获取所有数据库 SELECT * FROM Master..SysDatabases ORDER BY Name --获取test数据库下所有表 us ...
- SQLServer: 解决“错误15023:当前数据库中已存在用户或角色
解决SQL Server 2008 错误15023:当前数据库中已存在用户或角色,SQLServer2008,错误15023, 在使用SQL Server 2008时,我们经常会遇到一个情况:需要把一 ...
- SqlServer 由于未在SqlServer的此实例上安装复制组件解决方法
sqlserver2005在复制订阅时出现: “由于未在SqlServer的此实例上安装复制组件,Microsoft SQL server 无法访问这些组件,请参阅SQL Server……” 解决方法 ...
- 基础概念:Oracle数据库、实例、用户、表空间、表之间的关系
基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库 ...
随机推荐
- Vue学习笔记【11】——Vue调试工具vue-devtools的安装步骤和使用
1.fq安装 2.本地安装: Google浏览器 chrome://extensions/ ,打开扩展程序→打开开发者模式→加载已解压的扩展程序,选择解压后的扩展程序包即可.
- stl+数论——1247D
其实也不算很难想,每个元素质因子分解后的p^c的p和c用pair的形式存在每个元素vector里 要去前面找一个数使得所有指数相加是k的倍数,那么把vector里的所有c 模 k,然后去找前面互补的数 ...
- Linux系统磁盘分区、删除分区、格式化、挂载、卸载、开机自动挂载的方法总结
Linux系统按照MBR(Master Boot Record)传统分区模式: 注意:传统的MBR(Master Boot Record)分区方式最大只能分2T容量的硬盘,超过2T的硬盘一般采用GPT ...
- flutter 调用摄像头和照片
设置一个按钮调用 打开showCupertinoModalPopup FloatingActionButton(onPressed: (){ _showDialog(context); }, chil ...
- django 重写用户模型 AbstractBaseUser
https://blog.csdn.net/weixin_40744265/article/details/80745652
- Openstack组件实现原理 — Glance架构(V1/V2)
目录 目录 Glance 安装列表 Glance Image service Image service 的组件 Glance-Api Glance-Registry Glance-db Image ...
- CentOS 7 启用中文输入法
$HOME/.xinitrc LANG="zh_CN.UTF-8" exec startxfce4
- 谷歌与Airbnb的JS代码规范
谷歌JS代码规范 规范代码原因:代码规范是为了保持源代码编写模式一致,便于维护代码,可读性高. 1.使用空格代替tab 规范随后指出应该使用2个,而不是4个空格带实现缩进.(除了每一行的终止符序列,A ...
- Servilet初步
以http://locahost:8080/......开头,或者以/开头,都是绝对路径以路径开头:相对路径 路径/路径 Servlet执行流程:(只用自己编写执行的代码,执行的细节全是tomcat封 ...
- 更改eclipse中jsp默认编码格式为UTF-8
本文首发于cartoon的博客 转载请注明出处:https://cartoonyu.github.io/cartoon-blog 近段时间一直在学java三大框架,遇到了一个问 ...