数据示例:
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”进行了like搜索,基本的sql查询将返回Row-4和Row-5。但是我的存储过程应该循环检查Row-4是否有不为null的parentid,因此它获得了一个ID = row-4的parentid为3的行。现在它获得了一个ID = row-3的parentid为1的行,并且获得了row-1。现在row-1的parentd为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