データの例:
ID Name ParentID
1 parent-1 NULL
2 parent-2 NULL
3 sub 1
4 child-1-1 3
5 child-1-2 1
6 child-2-1 2
「%child-1%」のような名前を検索すると、上記のデータの Row-1、Row-3、Row-4、および Row-5 のレコードが必要になります。個別の行を返すストアド プロシージャを記述できるとしたら、どのようなものですか?
私の考えは、テキストを検索すると、parentID が null になるまでテーブルからレコードを選択し続けることです。したがって、「child-1」のような検索を行うと、基本的な SQL クエリは Row-4 と Row-5 を返します。しかし、私の手順は、Row-4にnullではないparentidがあることをループでチェックするため、行4のID = parentidが3の行を取得します。は 1 で、row-1 を取得します。現在、row-1 の親は NULL であるため、停止します。
このストアド プロシージャを使用して、検索後に親子階層を保持したいツリー ビューに検索機能を実装しています。
これまでのところ私はこれを試しましたが、ストアドプロシージャは初めてです:
USE DBname
Go
DECLARE @ParentID int
Declare @myresultset Cursor
Set @myresultset = CURSOR for Select ParentID from mytable where Name like 'child-1%'
OPEN @myresultset
Fetch NEXT from @myresultset
into @ParentID
While @@Fetch_Status=0
Begin
While @ParentID is not NULL
Begin
Select @ParentID = ParentID from mytable where ID=@ParentID
Select distinct * from mytable where ID=@ParentID
End
Fetch Next from @myresultset
into @ParentID
End
close @myresultset