ここでストアド プロシージャがどのように機能するかを説明し、後で質問に進みます。現在のプロシージャは、ツリー内のノードに対応する 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 が 1 つしか選択されていない場合には問題なく機能しますが、クエリが複数のノードの情報を返すように、複数の ID を受け入れるようにクエリを変更しようとしています。選択されたノード ID はカンマ区切りの文字列 ('101001,10100201,10100202') として渡されます。指定された ID は文字列内の他のノードの子ではありません (これは情報の重複を避けるために行われます。この条件はクエリを実行する前に適用されます)。
私はT-SQLで配列をシミュレートするためにいくつかの調査を行いましたが、私が遭遇したものはすべて、「配列」内の要素を検索するだけです. 私が立ち往生している問題は、単一 ID クエリが形成される方法と同様に、長さの値を各 ID に関連付けることです。
前もって感謝します。誰か質問があれば、できる限り答えます。