如何在T-SQL中检查邻接列表层次结构有效性

时间:2014-11-21 10:37:01

标签: sql sql-server-2008 tsql validation hierarchy

我使用Adjacency List格式在MS SQL数据库中存储大型层次结构。每个项目都有IndexNumberParentIndexNumber列。 IndexNumber列存储每个项目的序列号,ParentIndexNumber可用于计算层次结构深度。

有一个非常罕见的错误会破坏层次结构的有效性,因此我希望有一个SQL脚本来测试有效性,以便于测试和验证。以下是无效层次结构的示例:

| IN | PIN  |       |
|----|------|-------|
| 3  | NULL |       |
| 4  | 3    |       |
| 5  | 3    |       |
| 6  | 4    | FAIL! |
| 7  | 6    |       |

IndexNumber 6失败,因为IndexNumber 4的所有后代都应该有一个大于4的IndexNumber,但它们应该在IndexNumber 4的兄弟之后永远不存在,比如IndexNumber 5.我得到的数据使用了一个简单的选择,如下面的那个但是可以我测试有效性?使用较大的数据集和多个数据库,手动浏览数据非常耗时。层次结构可以是7层深。

SELECT
    IndexNumber, ParentTopicIndexNumber
FROM
    Items
ORDER BY IndexNumber;

0 个答案:

没有答案