sql-server – 什么工具从SQL Server分层数据生成图表?

有没有一个可以与sql Server一起使用的工具,可以从一个层次的数据模型中生成树状的图表?

我正在处理一个很大的地理层次结构,并希望可视化.

这是一个例子.

我有一个NodeHierarchy表存储节点之间的分层关系.表中的每一行表示一个节点.每个节点都有一个父节点.没有父级的节点是层次结构的根.

这是我如何创建我的表:

CREATE DATABASE HierarchyTest;
GO

USE HierarchyTest;
GO

CREATE TABLE NodeHierarchy (
  PK_NodeID INT NOT NULL
    CONSTRAINT PK_NodeHierarchy PRIMARY KEY,FK_ParentNodeID INT NULL
    CONSTRAINT FK_NodeHierarchy_NodeHierarchy FOREIGN KEY
      REFERENCES NodeHierarchy(PK_NodeID),Name NVARCHAR(255) NOT NULL
);

我有一个苏格兰城市和地点的例子.苏格兰是层次的根源.苏格兰的后裔是城市和场地.在这个喜事,父母“包含”一个孩子,所以我们说,例如“Barrowlands在格拉斯哥,格拉斯哥在苏格兰”.

此语句使用示例数据填充NodeHierachy表:

INSERT INTO NodeHierarchy(PK_NodeID,FK_ParentNodeID,Name)
VALUES
  (1,NULL,N'Scotland'),(2,1,N'Glasgow'),(3,N'Edinburgh'),(4,N'St Andrews'),(5,2,N'The Barrowlands'),(6,N'The Cathouse'),(7,N'Carling Academy'),(8,N'SECC'),(9,N'King Tut''s Wah-Wah Hut'),(10,3,N'Henry''s Cellar Bar'),(11,N'The Bongo Club'),(12,N'Sneaky Pete''s'),(13,N'The Picture House'),(14,N'Potterrow'),(15,4,N'Aikman''s'),(16,N'The Union'),(17,N'Castle Sands');

SELECT * FROM NodeHierarchy的输出

PK_NodeID   FK_ParentNodeID Name
----------- --------------- ---------------------------------
1           NULL            Scotland
2           1               Glasgow
3           1               Edinburgh
4           1               St Andrews
5           2               The Barrowlands
6           2               The Cathouse
7           2               Carling Academy
8           2               SECC
9           2               King Tut's Wah-Wah Hut
10          3               Henry's Cellar Bar
11          3               The Bongo Club
12          3               Sneaky Pete's
13          3               The Picture House
14          3               Potterrow
15          4               Aikman's
16          4               The Union
17          4               Castle Sands

(17 row(s) affected)

Freemind我画了这个等效图:

什么工具可以为我做最少的手动工作?

编辑:原来我说我想要将层次结构的“全部或部分”可视化.这里发布的解决方案无条件地可视化整个层次结构.这对于小型示例层次结构是适用的,但对于较大的层次结构,仅可视化其中的一部分可能更有用.

因为我没有指定我的意思是“部分”,所以我把这个从这个问题中删除了.我在another question年询问了部分可视化.

解决方法

导出并运行它通过 GraphViz – 您甚至不必生成层次结构(仅导出节点和边) – 只需分配节点名称,这些节点名称根据NodeID列是唯一的,并在边缘使用相同的节点名称.

如果你想要交互式的东西,那么Microsoft有一个可以从.NET使用的Automatic Graph Layout library.

这是一个introduction to GraphViz.

您将要做的是通过使用以下脚本导出sql输出DOT文件http://data.stackexchange.com/stackoverflow/q/109885/,它将通过GraphViz运行并生成图片.

DOT语法相对简单 – 您可以手动编写它,然后从sql生成,并将其简单地粘贴到一个文件或其他东西(如.NET或PowerShell)中,该文件读取sql集并生成文件.

您可以使用SSIS进行自动化.我制作了一个包装,写出了DOT文件并运行graphviz,并每天保存我们系统的graphiacl快照.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...