数据库文档 - Microsoft SQL Server 2005/2008






4.43/5 (10投票s)
创建数据库文档表(或表)的架构。

引言
在开发公司中,将数据库架构作为开发生命周期的一部分是一个公认的最佳实践。对于多个开发团队致力于同一目标而言,数据库架构也是必需的。此外,.NET 开发人员可能并不完全了解 SQL 系统对象的信息。
这里是我开发的一个小工具,它可以为 Microsoft SQL Server 2005 及更高版本生成 XML 格式的数据库文档。该工具使用 Microsoft .NET Framework 2.0 编写,采用 VB.NET 语言。我相信你们中的许多人可能已经在世界上的某个地方尝试过它。
该工具会生成
- 所有表名及其架构。
- 与表关联的所有列。
- 所有列属性,如数据类型、长度、是否允许
Null
以及默认值。 - 约束信息,如主键和标识列的特性。
背景
所有用户数据库、表、列、约束、索引、文件信息和特性都存储在数据库引擎中。Microsoft SQL Server 提供了目录视图接口来检索任何数据库对象的信息。请注意,目录视图不提供有关复制、备份或 SQL Server Agent 目录数据的信息。
我使用了目录视图来获取数据库对象(表、列等)的信息。您可以在 MSDN(对象目录视图)或 SQL Server 2005 联机丛书(ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/e8670a6b-e15c-4126-8d2d-c9cfb968a12d.htm)中找到更多信息。
代码
此解决方案是在 Visual Studio 2008 中构建的。我引用了以下 .NET Framework 2.0 命名空间:System
、System.configuration
、System.Data
、System.Deployment
、System.Drawing
、System.Windows.Forms
、System.Xml
,并使用了 Microsoft .NET 的数据访问应用程序块进行数据访问操作。更多信息可以在 此处找到。该项目包含一个 Windows 窗体和 App.config 文件。在 Windows 窗体上,我有一个按钮和一个文本框。按钮用于开始处理,文本框用于跟踪进度。
您可以在 bin 文件夹中执行可执行文件,在相应的文本框中输入 SQL Server 和数据库名称,然后单击窗体上的“创建”按钮。
必需的查询
以下是获取表属性(如名称、架构、列、标识列、主键列和索引列)所需的查询。您也可以在标准的查询工具(SQL Server Management Query 或 Query Analyzer)代码中使用它们来获取数据库表的信息。
要获取所有表名,我必须针对数据库运行以下查询
SELECT NAME,TYPE,TYPE_DESC,OBJECT_ID,schema_id FROM sys.tables
-- Or
SELECT NAME,TYPE,TYPE_DESC,OBJECT_ID,schema_id FROM sys.objects WHERE Type = 'U'
要获取与表相关的所有架构
SELECT schemas.name FROM sys.schemas schemas
WHERE schemas.schema_id =<TableObjectID>
要获取表中的所有列,我使用了以下针对数据库的查询
SELECT A.NAME,B.Name as DataType,A.MAX_LENGTH,
A.PRECISION ,A.OBJECT_ID,A.SYSTEM_TYPE_ID,a.IS_Nullable,c.definition FROM
SYS.COLUMNS A INNER JOIN SYS.TYPES B ON B.user_type_id=A.SYSTEM_TYPE_ID
left outer JOIN sys.default_constraints C ON c.OBJECT_ID = a.Default_object_id
WHERE A.object_id= <TableObjectID>
要获取与列标识相关的所有信息
SELECT NAME,seed_value,increment_value, is_not_for_replication
FROM sys.identity_columns where object_id=<TableObjectID>
获取给定表的primary key信息
SELECT a.NAME,d.name as ColumnName
FROM sys.key_constraints a
INNER JOIN sys.indexes b
on a.PARENT_object_id= b.object_id
INNER JOIN sys.index_columns C
on C.object_id=a.PARENT_object_id AND B.index_id = c.index_id
INNER JOIN sys.columns d
ON D.object_id = A.PARENT_object_id
AND C.column_id = d.Column_id
WHERE(a.PARENT_object_id = & <TableID>
AND b.is_primary_key=1 AND a.type='PK'
获取给定表的primary key信息
SELECT a.name as IndexName,a.type_desc +
Case a.is_unique
When 1
Then ',Unique '
else
',Not Unique '
End
+
Case a.is_primary_key
When 1
Then ',Primary Key '
else
',Not Primary Key '
End
as IndexDescription ,
C.name as ColumnName
FROM sYS.INDEXES a
INNER JOIN sys.index_columns b
on b.object_id=a.object_id AND A.index_id = b.index_id
INNER JOIN sys.columns c
ON c.object_id = A.object_id
AND b.Column_id = c.column_id
WHERE(a.object_id = <ObjectID> )
算法
步骤 1:创建 XML 文档对象。
步骤 2:创建根节点。
步骤 3:获取所有表名。
步骤 4:遍历每个表。
步骤 5:创建一个带有表名的节点。
步骤 6:检索每个表的字段特性(列名、数据类型、长度、是否可空和默认值)。
步骤 7:为每个列名创建 XML 元素,并将其附加到列节点。
步骤 8:检索每个表的主键(名称和列名)信息。
步骤 9:创建主键 XML 节点。
步骤 10:创建 Name 和 Column XML 元素,并将它们附加到主键 XML 节点。
步骤 11:检索每个表的索引(索引名称、列名和描述)信息。
步骤 12:创建 Index XML 节点。
步骤 13:为 Index 名称、描述、列名创建 XML 元素,并将它们附加到 Index XML 节点。
步骤 14:将索引 XML 节点、主键 XML 节点、列节点附加到表节点。
步骤 15:为每个步骤在文本框中进行简单日志记录。
步骤 16:将 XML 文档对象另存为 XML 文件。
步骤 17:定义 XSL 样式表,将样式应用于原始 XML 文件。
步骤 18:运行 Iexplore 以在 UI 中显示最终输出(参见第二个屏幕截图)。
XSL 样式
您可以在 bin 文件夹中执行可执行文件,在相应的文本框中输入 SQL Server 和数据库名称,然后单击窗体上的“创建”按钮。
您可以修改 bin 文件夹中的 test.xsl 文件来自定义颜色、字体等。
关注点
XSL 设计还有改进的空间。您还可以使用 SQL Server SMO 命名空间库自动填充组合框中的 SQL Server 名称和数据库名称。
历史
- 2009 年 3 月 2 日:初始发布