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 が 1 つしか選択されていない場合には問題なく機能しますが、クエリが複数のノードの情報を返すように、複数の ID を受け入れるようにクエリを変更しようとしています。選択されたノード ID はカンマ区切りの文字列 ('101001,10100201,10100202') として渡されます。指定された ID は文字列内の他のノードの子ではありません (これは情報の重複を避けるために行われます。この条件はクエリを実行する前に適用されます)。

私はT-SQLで配列をシミュレートするためにいくつかの調査を行いましたが、私が遭遇したものはすべて、「配列」内の要素を検索するだけです. 私が立ち往生している問題は、単一 ID クエリが形成される方法と同様に、長さの値を各 ID に関連付けることです。

前もって感謝します。誰か質問があれば、できる限り答えます。

4

1 に答える 1

0

私は関心の分離のアイデアが好きなので、

まず、文字列の解析を検討することをお勧めします 。次に、文字列のリストを反復処理して、単一の値を作業中のspに渡し、状況に応じて結果を一時テーブルまたはテーブル変数に返します。

最終的に完成した結果を処理します

お役に立てれば!

于 2012-07-19T22:43:51.927 に答える