我将介绍存储过程现在是如何工作的,然后再讨论这个问题。当前过程接受与树中的节点相对应的 ID 号 - ID 被格式化,使得子节点的左子字符串包含其直接父节点的 ID。因此,如果子节点的 ID 为 10100349,则其父节点的 ID 为 101003。该过程通过以下方式返回属于所选节点及其子节点的任何信息:
CREATE PROCEDURE [dbo].[blah]
-- Parameter
@IDNumber varchar(100),
...
-- Get the length of the ID number
DECLARE @IDNumLength integer
SET @IDNumLength = LEN(@IDNumber)
...
SELECT
*whatever information*
WHERE
LEFT(table.[IDNumber], @IDNumLength) = @IDNumber
出于说明目的:
1010 (root node)
|
|_ 101001
| |_ 10100101
| |_ 10100102
| |_ 10100103
| |_ 10100104
|
|_ 101002
. |_ 10100201
. |_ 10100202
. |_ 10100203
因此,搜索节点 101001 上的信息将返回其自身及其子节点 10100101 到 10100104 的信息。
这适用于仅选择一个 ID 的情况,但我正在尝试修改查询以接受多个 ID,以便查询返回多个节点的信息。选定的节点 ID 作为逗号分隔的字符串 ('101001,10100201,10100202') 传入,其中指定的 ID 都不是字符串中任何其他节点的子节点(这样做是为了避免信息重复 - 这种情况是在执行查询之前强制执行)。
我已经对在 T-SQL 中模拟数组进行了一些研究,但是我遇到的任何事情都只涉及搜索“数组”中的任何元素。我遇到的问题是将长度值与每个 ID 相关联,类似于单 ID 查询的形成方式。
提前致谢。如果有人有问题,我会尽我所能回答他们。