目录
介绍
如何使用文档工具记录SQL Server数据库
使用dbForge Documenter为SQL Server记录数据库
结论
所有公司都积累了各种数据,这些数据不可避免地最终存储在数据库中。如今,几乎所有你能想到的应用程序都将包含一个数据库。这就是数据库对象描述中存在相当高的需求的原因。
可以通过两种主要方式来处理此过程——您可以使用对象的扩展属性或各种第三方实用程序。
在本文中,我们将使用扩展属性和第三方实用程序查看SQL Server数据库文档的一些示例。
您可以使用sp_addextendedproperty系统存储过程添加扩展属性。它的文档位于此处。
以下是如何使用此存储过程的一些示例:
1)为dbo.GetPlansObject函数的@ObjectID参数添加了一个描述:
EXECUTE sp_addextendedproperty @name = N'MS_Description',
@value = N'Object identifier',
@level0type = N'SCHEMA',
@level0name = N'dbo',
@level1type = N'FUNCTION',
@level1name = N'GetPlansObject',
@level2type = N'PARAMETER',
@level2name = N'@ObjectID';
同样,您可以添加存储过程参数的说明。
2)为dbo.GetPlansObject函数添加了一个描述:
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'Returns all plans for the specified object',
@level0type=N'SCHEMA',
@level0name=N'dbo',
@level1type=N'FUNCTION',
@level1name=N'GetPlansObject';
您可以以类似的方式为存储过程和触发器添加描述。
3)添加inf.vColumnTableDescription视图的描述:
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'Description of table columns',
@level0type=N'SCHEMA',
@level0name=N'inf',
@level1type=N'VIEW',
@level1name=N'vColumnTableDescription';
您还可以添加表的说明。
4)添加dbo.TABLE 表的TEST_GUID列的描述:
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'Record ID (global)',
@level0type=N'SCHEMA',
@level0name=N'dbo',
@level1type=N'TABLE',
@level1name=N'TEST',
@level2type=N'COLUMN',
@level2name=N'TEST_GUID';
还可以添加表列的描述。
5)添加rep架构的描述:
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'The rep schema objects contain information for reports' ,
@level0type=N'SCHEMA',
@level0name=N'rep';
6)添加数据库描述
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'Administration Database
Version for MS SQL Server 2016-2017 (MS SQL Server 2012-2014 is also fully or partially supported).
Support for all versions up to MS SQL Server 2012 may not be at a sufficient level for use in a production environment';
7)添加数据库索引的描述:
EXEC sys.sp_addextendedproperty @name=N'MS_Description',
@value=N'cluster index' ,
@level0type=N'SCHEMA',
@level0name=N'srv',
@level1type=N'TABLE',
@level1name=N'Recipient',
@level2type=N'INDEX',
@level2name=N'indInsertUTCDate';
同样,您可以添加视图索引的描述。
要更改或删除描述,您只需要分别使用sp_updateextendedproperty和sp_dropextendedproperty存储过程。您可以在文档中阅读有关这些存储过程的更多信息:
现在,我们将分析您获取对象描述信息的方式:
1)获取有关数据库对象描述的信息,可以使用以下查询:
select
SCHEMA_NAME(obj.[schema_id]) as SchemaName
,QUOTENAME(object_schema_name(obj.[object_id]))+'.'+quotename(obj.[name]) as ObjectName
,obj.[type] as [Type]
,obj.[type_desc] as [TypeDesc]
,ep.[value] as ObjectDescription
from sys.objects as obj
left outer join sys.extended_properties as ep on obj.[object_id]=ep.[major_id]
and ep.[minor_id]=0
and ep.[name]='MS_Description'
where obj.[is_ms_shipped]=0
and obj.[parent_object_id]=0
此处使用以下系统视图:
1.1)sys.objects ——数据库对象。你可以在这里了解更多相关信息
1.2)sys.extended_properties——当前数据库中的扩展属性。更多细节在这里
此查询产生以下列:
1.1)SchemaName ——对象架构
1.2)ObjectName——对象的名称
1.3)Type——对象类型
1.4)TypeDesc——对象类型的描述
1.5)ObjectDescription——自定义对象描述
2)要获得具有父项的对象的描述,可以使用以下查询:
select
SCHEMA_NAME(obj.[schema_id]) as SchemaName
,QUOTENAME(object_schema_name(obj.[parent_object_id]))+'.'+quotename(object_name(obj.[parent_object_id])) as ParentObjectName
,QUOTENAME(object_schema_name(obj.[object_id]))+'.'+quotename(obj.[name]) as ObjectName
,obj.[type] as [Type]
,obj.[type_desc] as [TypeDesc]
,ep.[value] as ObjectDescription
from sys.all_objects as obj
left outer join sys.extended_properties as ep on obj.[parent_object_id]=ep.[major_id]
and ep.[minor_id]=obj.[object_id]
and ep.[name]='MS_Description'
where obj.[is_ms_shipped]=0
and obj.[parent_object_id]<>0
此处显示与上一个查询类似的列,但添加了一个新列。ParentObjectName是对象的父级(例如,表是列的父级)。
此查询还使用sys.all_objects显示所有数据库对象的系统视图。您可以在此处详细了解此视图。
3)您可以通过执行以下查询来获取参数描述:
select
SCHEMA_NAME(obj.[schema_id]) as SchemaName
,QUOTENAME(object_schema_name(obj.[object_id]))+'.'+quotename(object_name(obj.[object_id])) as ParentObjectName
,p.[name] as ParameterName
,obj.[type] as [Type]
,obj.[type_desc] as [TypeDesc]
,ep.[value] as ParameterDescription
from sys.parameters as p
inner join sys.objects as obj on p.[object_id]=obj.[object_id]
left outer join sys.extended_properties as ep on obj.[object_id]=ep.[major_id]
and ep.[minor_id]=p.[parameter_id]
and ep.[name]='MS_Description'
where obj.[is_ms_shipped]=0
这里,显示的字段类似于上一个查询中的字段。但是,有许多变化和补充:
3.1)Type和TypeDesc——与父对象(存储过程或函数)相关
3.2)ParameterName——参数的名称
此查询还使用sys.parameters显示数据库对象参数的系统视图。有关更详细的说明,请随时参阅视图的文档。
4)可以使用以下查询获得表列的描述:
select
SCHEMA_NAME(t.schema_id) as SchemaName
,QUOTENAME(object_schema_name(t.[object_id]))+'.'+quotename(t.[name]) as TableName
,c.[name] as ColumnName
,ep.[value] as ColumnDescription
from sys.tables as t
inner join sys.columns as c on c.[object_id]=t.[object_id]
left outer join sys.extended_properties as ep on t.[object_id]=ep.[major_id]
and ep.[minor_id]=c.[column_id]
and ep.[name]='MS_Description'
where t.[is_ms_shipped]=0;
此处显示以下列:
4.1)SchemaName——表架构的名称
4.2)TableName——表的名称
4.3)ColumnName——表列的名称
4.4)ColumnDescription——表列的描述
该查询还使用以下系统视图:
4.1)sys.tables——表。更多细节在这里
4.2)sys.columns——列。在此处查找更多信息
5)可以通过以下查询检索视图列的描述:
select
SCHEMA_NAME(t.schema_id) as SchemaName
,QUOTENAME(object_schema_name(t.[object_id]))+'.'+quotename(t.[name]) as ViewName
,c.[name] as ColumnName
,ep.[value] as ColumnDescription
from sys.views as t
inner join sys.columns as c on c.[object_id]=t.[object_id]
left outer join sys.extended_properties as ep on t.[object_id]=ep.[major_id]
and ep.[minor_id]=c.[column_id]
and ep.[name]='MS_Description'
where t.[is_ms_shipped]=0;
此处显示以下列:
5.1)SchemaName——表示架构的名称
5.2)ViewName——视图的名称
5.3)ColumnName——视图列的名称
5.4)ColumnDescription——视图列的描述
该请求还使用sys.views系统视图,该视图显示所有数据库视图。你可以在这里找到更多信息
6)您可以使用以下查询获取数据库架构描述:
select
SCHEMA_NAME(t.schema_id) as SchemaName
,ep.[value] as SchemaDescription
from sys.schemas as t
left outer join sys.extended_properties as ep on t.[schema_id]=ep.[major_id]
and ep.[minor_id]=0
and ep.[name]='MS_Description'
有两列,SchemaName和SchemaDescription,分别显示架构的名称和描述。
该查询还使用sys.schemas系统视图,该视图显示所有数据库架构。更多细节
7)您可以使用以下查询获取整个数据库中索引的所有扩展属性:
SELECT SCHEMA_NAME(obj.[schema_id]) as [SchemaName],
obj.[name] as [ObjectName],
ind.[name] as [IndexName],
EP.[name] as [ExtendedPropertyName],
EP.[value] as [ExtendedPropertyValue]
FROM sys.extended_properties AS EP
inner join sys.objects as obj on EP.[major_id]=obj.[object_id]
inner join sys.indexes as ind on EP.[minor_id]=ind.[index_id]
WHERE EP.class = 7
此处显示以下列:
7.1)SchemaName——对象架构的名称
7.2)ObjectName——对象的名称
7.3)IndexName——索引的名称
7.4)ExtendedPropertyName——扩展属性的名称
7.5)ExtendedPropertyValue——扩展属性的值
该查询还使用sys.indexes系统视图,该视图显示数据库中的所有索引。你可以在这里找到更多细节。
接下来,我们将介绍如何使用Devart的专用实用程序以另一种方式处理数据库文档。
在dbForge Studio for SQL Server中,您可以创建数据库文档项目。此功能也在dbForge Documenter for SQL Server中实现。
在此示例中,我们将使用为MS SQL Server DBMS维护而设计的SRV数据库。它可以出于任何目的自由分发,因此您可以在此处下载其源文件:https://github.com/jobgemws/Projects-MS-SQL-Server-DBA/tree/master/SRV
要在打开Studio后创建数据库文档项目,请单击“工具”菜单中的“新建文档...”:
图1为数据库创建新文档
接下来,选择您需要为其创建数据库文档的所需服务器。
在此之后,将出现以下文档主页。它可以以各种方式安排,包括以下内容:
图2自定义主页
您可以在不在文档中生成主页的情况下开始。要执行此操作,只需取消选中窗口左上角的框即可。
请记住,只会生成带有启用复选框的元素。
接下来,您需要在所有选定服务器和每个特定服务器的范围内配置生成:
图3为所有选定的服务器设置文档生成
例如,让我们通过将所有选项切换为OFF来禁用此页面上的所有设置:
图4设置所选服务器的文档生成
接下来,选择“用户数据库”页面。另外,为了示例,让我们关闭“用户数据库”选项:
图5设置“用户数据库”页面
接下来,选择SRV数据库:
图6设置SRV数据库页面
在这里,我们将输入数据库的描述并单击“保存”。
用户保存的描述中的所有更改也将保存在相应对象的高级属性中。
之后,我们将关闭“属性”,“选项”和“数据库文件”:
图7禁用SRV数据库选项
其余设置应保持启用状态:
图8查看启用的SRV数据库选项
现在让我们打开SRV数据库并选择“Tables”页面:
图9查看和编辑SRV表描述
此页面列出了表格及其说明。
编辑说明时,应显示两个按钮:
1)保存——保存更改
2)取消——取消更改
让我们点击它来选择dbo.AuditQuery表:
图10查看和编辑dbo.AuditQuery表的列描述
此页面列出了表的列及其说明。
此外,您还可以看到此页面上显示的表索引。
编辑说明时,应显示两个按钮:
1)保存——保存更改
2)取消——取消更改
此外,该页面还包含表定义代码,表描述,表属性等。
如果有必要,您可以关闭任何个别选项。
Views文件夹中的视图页面以及其他数据库对象的页面看起来相同:
图11数据库对象类型
通过这种方式,您可以记录以下数据库对象:1)表及其列和索引; 2)视图及其列和索引; 3)存储过程及其参数; 4)函数及其参数,包括表值函数和标量值函数; 5)DDL触发器; 6)用户; 7)角色; 8)架构和其他。
设置文档后,您可以通过单击«保存»并选择适当的路径和文件来保存项目:
图12保存文档项目
生成数据库文档
现在,让我们仔细看看文档项目的顶部面板:
图13查看文档项目菜单
这里有三个按钮:
1)添加连接 ...——允许您为文档添加新服务器
2)刷新——开始更新所选文档服务器上的信息的过程
3)生成 ...——打开文档生成设置窗口。
单击“生成 ...”按钮。文档生成窗口本身将被打开:
图14设置文档生成
在这里,您可以选择许多不同的选项,但以下是必要的:
1)格式(通常默认选择HTML)
2)将生成文档的文件夹
此外,通过单击左下角的“保存命令行...”,可以将所选设置生成为.bat文件。
接下来,您需要单击“生成”按钮以开始生成文档本身的过程。成功完成此操作后,将显示以下窗口:
图15成功完成文档生成
之后,转到所选文档目录并打开mail.html文件以打开生成的SRV数据库Web文档。
同样,可以在一个文档中收集多个数据库,即使它们位于不同的服务器上也是如此。
我们研究了如何通过高级属性和dbForge Documenter for SQL Server的帮助创建和查看对象描述。描述构成了大量的数据库文档。此外,从本文所示的示例中,我们可以看到dbForge Documenter for SQL Server工具允许您快速创建和编辑特定对象和整个文档的描述。这可以针对单个或多个数据库完成——无论它们位于一个服务器上还是位于多个不同的服务器上。
原文地址:https://www.codeproject.com/Articles/5161784/Documenting-MS-SQL-Server-Databases