65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.43/5 (10投票s)

2009年3月2日

CPOL

4分钟阅读

viewsIcon

52269

downloadIcon

2256

创建数据库文档表(或表)的架构。

ArticleFinalScreen.JPG

Finaloutput__Medium_2.JPG

引言

在开发公司中,将数据库架构作为开发生命周期的一部分是一个公认的最佳实践。对于多个开发团队致力于同一目标而言,数据库架构也是必需的。此外,.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 命名空间:SystemSystem.configurationSystem.DataSystem.DeploymentSystem.DrawingSystem.Windows.FormsSystem.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 日:初始发布
© . All rights reserved.