0

我将介绍存储过程现在是如何工作的,然后再讨论这个问题。当前过程接受与树中的节点相对应的 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 查询的形成方式。

提前致谢。如果有人有问题,我会尽我所能回答他们。

4

1 回答 1

0

我喜欢关注点分离的想法,所以

首先,您可能要考虑解析字符串 其次,遍历您的字符串列表,将单个值传递给您的工作 sp,根据情况将结果返回到临时表或表变量。

最后处理完成的结果

希望这可以帮助!

于 2012-07-19T22:43:51.927 回答