我正在使用具有位置表的数据库,例如:
locationID | locationHierarchy
1 | 0
2 | 1
3 | 1,2
4 | 1
5 | 1,4
6 | 1,4,5
这使得一棵树像这样
1
--2
----3
--4
----5
------6
其中 locationHierarchy 是其所有祖先的 locationID 的 csv 字符串(想想层次结构树)。在给定起始 locationID 的情况下,当朝着树的顶部工作时,这使得确定层次结构变得容易。
现在我需要编写代码以从祖先开始并递归查找所有后代。MySQL 有一个名为“find_in_set”的函数,它可以轻松解析 csv 字符串以查找值。这很好,因为我可以说“在集合中查找值 4”,这将给出所有 locationID 为 4 的后代的位置(包括 4 本身)。
不幸的是,这是在 SQL Server 2014 上开发的,它没有这样的功能。CSV 字符串是可变长度(几乎允许无限级别),我需要一种方法来查找某个位置的所有祖先。
我在 Internet 上找到的很多将 find_in_set 函数模拟到 SQL Server 中的内容都假定层次结构的固定深度(例如最多 4 级)对我不起作用。
有没有人有存储过程或任何我可以集成到查询中的东西?我真的不想从这个表中提取所有记录来使用代码来单独解析 CSV 字符串。
我想在 locationHierarchy 字符串中搜索 locationID% 或 %,{locationid},% 会起作用,但速度很慢。