数据示例:
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
现在,如果我搜索 Name like '%child-1%',我想要以下记录:上述数据中的第 1 行、第 3 行、第 4 行和第 5 行。如果我可以编写返回不同行的存储过程会怎样?
我的想法是如果我搜索文本,它将继续从表中选择记录,直到 parentID 为空。因此,如果我对“child-1”进行类似搜索,则基本 sql 查询将返回第 4 行和第 5 行。但是我的程序在一个循环中检查第 4 行的 parentid 不为空,因此它得到一个 ID= 第 4 行的 parentid 为 3 的行。现在它得到一个 ID = 第 3 行的 parentid 的行为 1 并获得第 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