SQL数据库数据字典怎么生成的?

SQL数据库数据字典怎么生成的?,第1张

数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。

数据库数据字典是一组表和视图结构。它们存放在SYSTEM表空间中。

数据库数据字典不仅是每个数据库的中心。而且对每个用户也是非常重要的信息。用户可以用SQL语句访问数据库数据字典。

生成数据库参考代码如下:

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:<Carbe>

-- Create date: <2014-09-19>

-- Description:<生成数据库字典>

-- =============================================

CREATE PROCEDURE [dbo].[CreateDatabaseDictionarie]

AS

BEGIN

DECLARE @TableName nvarchar(35),@htmls varchar(8000)

DECLARE @字段名称 VARCHAR(200)

DECLARE @类型 VARCHAR(200)

DECLARE @长度 VARCHAR(200)

DECLARE @数值精度 VARCHAR(200)

DECLARE @小数位数 VARCHAR(200)

DECLARE @默认值 VARCHAR(200)

DECLARE @允许为空 VARCHAR(200)

DECLARE @外键 VARCHAR(200)

DECLARE @主键 VARCHAR(200)

DECLARE @描述 VARCHAR(200)

SET NOCOUNT ON

DECLARE Tbls CURSOR

FOR

Select distinct Table_name

FROM INFORMATION_SCHEMA.COLUMNS

order by Table_name

OPEN Tbls

PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'

PRINT '<html xmlns="http://www.w3.org/1999/xhtml">'

PRINT '<head>'

PRINT '<title>KC管理系统-数据库字典</title>'

PRINT '<style type="text/css">'

PRINT 'body{margin:0font:11pt "arial", "微软雅黑"cursor:default}'

PRINT '.tableBox{margin:10px autopadding:0pxwidth:1000pxheight:autobackground:#FBF5E3border:1px solid #45360A}'

PRINT '.tableBox h3 {font-size:12ptheight:30pxline-height:30pxbackground:#45360Apadding:0px 0px 0px 15pxcolor:#FFFmargin:0pxtext-align:left }'

PRINT '.tableBox table {width:1000pxpadding:0px }'

PRINT '.tableBox th {height:25pxborder-top:1px solid #FFFborder-left:1px solid #FFFbackground:#F7EBC8border-right:1px solid #E0C889border-bottom:1px solid #E0C889 }'

PRINT '.tableBox td {height:25pxpadding-left:10pxborder-top:1px solid #FFFborder-left:1px solid #FFFborder-right:1px solid #E0C889border-bottom:1px solid #E0C889 }'

PRINT '</style>'

PRINT '</head>'

PRINT '<body>'

FETCH NEXT FROM Tbls INTO @TableName

WHILE @@FETCH_STATUS = 0

BEGIN

Select @htmls = '<h3>' + @TableName + ' : '+ CAST(Value as varchar(1000)) + '</h3>'

FROM sys.extended_properties AS A

WHERE A.major_id = OBJECT_ID(@TableName)

and name = 'MS_Description' and minor_id = 0

PRINT '<div class="tableBox">'

PRINT @htmls

PRINT '<table cellspacing="0">'

PRINT '<tr>'

PRINT '<th>字段名称</th>'

PRINT '<th>类型</th>'

PRINT '<th>长度</th>'

PRINT '<th>数值精度</th>'

PRINT '<th>小数位数</th>'

PRINT '<th>默认值</th>'

PRINT '<th>允许为空</th>'

PRINT '<th>外键</th>'

PRINT '<th>主键</th>'

PRINT '<th>描述</th>'

PRINT '</tr>'

DECLARE TRows CURSOR

FOR

SELECT

'<td>' + CAST(clmns.name AS VARCHAR(35)) + '</td>',

'<td>' + CAST(udt.name AS CHAR(15)) + '</td>' ,

'<td>' + CAST(CAST(CASE WHEN typ.name IN (N'nchar', N'nvarchar') AND clmns.max_length <>-1 THEN clmns.max_length/2 ELSE clmns.max_length END AS INT) AS VARCHAR(20)) + '</td>',

'<td>' + CAST(CAST(clmns.precision AS INT) AS VARCHAR(20)) + '</td>',

'<td>' + CAST(CAST(clmns.scale AS INT) AS VARCHAR(20)) + '</td>',

'<td>' + isnull(CAST(cnstr.definition AS VARCHAR(20)),'') + '</td>',

'<td>' + CAST(clmns.is_nullable AS VARCHAR(20)) + '</td>' ,

'<td>' + CAST(clmns.is_computed AS VARCHAR(20)) + '</td>' ,

'<td>' + CAST(clmns.is_identity AS VARCHAR(20)) + '</td>' ,

'<td>' + ISNULL(CAST(exprop.value AS VARCHAR(500)),'') + '</td>'

FROM sys.tables AS tbl

INNER JOIN sys.all_columns AS clmns ON clmns.object_id=tbl.object_id

LEFT OUTER JOIN sys.indexes AS idx ON idx.object_id = clmns.object_id AND 1 =idx.is_primary_key

LEFT OUTER JOIN sys.index_columns AS idxcol ON idxcol.index_id = idx.index_id AND idxcol.column_id = clmns.column_id AND idxcol.object_id = clmns.object_id AND 0 = idxcol.is_included_column

LEFT OUTER JOIN sys.types AS udt ON udt.user_type_id = clmns.user_type_id

LEFT OUTER JOIN sys.types AS typ ON typ.user_type_id = clmns.system_type_id AND typ.user_type_id = typ.system_type_id

LEFT JOIN sys.default_constraints AS cnstr ON cnstr.object_id=clmns.default_object_id

LEFT OUTER JOIN sys.extended_properties exprop ON exprop.major_id = clmns.object_id AND exprop.minor_id = clmns.column_id AND exprop.name = 'MS_Description'

WHERE (tbl.name = @TableName and exprop.class = 1) --I don't wand to include comments on indexes

ORDER BY clmns.column_id ASC

OPEN TRows

FETCH NEXT FROM TRows INTO @字段名称,@类型,@长度,@数值精度,@小数位数,@默认值,@允许为空,@外键,@主键,@描述

WHILE @@FETCH_STATUS = 0

BEGIN

PRINT '<tr>'

PRINT @字段名称

PRINT @类型

PRINT @长度

PRINT @数值精度

PRINT @小数位数

PRINT @默认值

PRINT @允许为空

PRINT @外键

PRINT @主键

PRINT @描述

PRINT '</tr>'

FETCH NEXT FROM TRows INTO @字段名称,@类型,@长度,@数值精度,@小数位数,@默认值,@允许为空,@外键,@主键,@描述

END

CLOSE TRows

DEALLOCATE TRows

PRINT '</table>'

PRINT '</div>'

FETCH NEXT FROM Tbls INTO @TableName

END

PRINT '</body>'

PRINT '</html>'

CLOSE Tbls

DEALLOCATE Tbls

END

需求已知一个数据(字符串,数值等)是从一个数据库中查询出的,但是数据库表以及表结构不知。需要通过该值查找出所保存的表名以及字段名,目标暂定为SqlServer。Oracle思路明白也可作出。该问题来源于一个同事提出,数据交换时,由于现有系统是由第三方软件提供商设计,数据库不提供,在此对这种行为表示鄙视!本文并非是用来解决该问题的解决方案,毕竟不是常规的方法,最好是由客户出面协商解决。本文只是一种方法的研究,前期阶段可以暂时如此。分析如果已知表和字段结构,查找已知字段的固定或不固定值,是很简单的,用简单sql语句查询即可,如: SELECT FIELD FROM TABLE WHERE FIELD LIKE '%STRING%'现在只知道STRING的值,需要知道FIELD 和 TABLE,可以通过数据库中的数据字典查出。数据字典的查找方法见本人另一篇日志 SqlServer2005数据库字典通过遍历轮询数据库中所有的表的所有符合字段,查出该表的该字段是否存在数据值。即通过数据库中的数据字典,构造轮询查找所有表所有字段的语句,得出是否存在对应数值。最后形式为很多个SELECT 语句,都进行查询。解决方法思路明确后,就能往下进行了,通过网络搜索,居然也有人遇到如此问题,而且对SqlServer的构造查询语句查询的TSQL也已经有了,对此申明:本人不是拿来主义者,只是思路刚好一致了,网络真是个神奇的地方。源码SQL代码 解释如下:先通过对数据字典查询,构造出SQL查询语句列表,然后用游标对该列表逐一执行查询语句。经测试成功,但有些地方待改进。经测试,上述代码能够查询系统中所有表的所有字段,但是登陆用户不同,结果有差异。原因为没有限定查询的Schema,对SYS和DBO查询没问题,但SYS架构一般不需要,其他需要的架构又直接去除了架构名称。所以会有问题,比如DBO2.TABLE1,上述查询语句仍然为SELECT ... FROM TABLE1,会出错。经修正后的语句如下,以后可以根据需求自己修改:

就是维护整个数据库运行的内部表。属于数据库系统的表。

oracle官方的解释是

One of the most important parts of an Oracle database is its data dictionary, which is a read-only set of tables that provides information about the database. A data dictionary contains:

The definitions of all schema objects in the database (tables, views, indexes, clusters, synonyms, sequences, procedures, functions, packages, triggers, and so on)

How much space has been allocated for, and is currently used by, the schema objects

Default values for columns

Integrity constraint information

The names of Oracle users

Privileges and roles each user has been granted

Auditing information, such as who has accessed or updated various schema objects

Other general database information

The data dictionary is structured in tables and views, just like other database data. All the data dictionary tables and views for a given database are stored in that database's SYSTEM tablespace.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9940504.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存