请问:SQL循环问题
哈 先谢谢各位的帮忙 祝中秋happy
问题:
Data_Merch(父子档案关系表)
FMerch SMerch
b c
c d
d a
=============
这是表中数据
现在要插入数据
比如(x,y)
插入前想判断是否出现死循环
也就是y的所有子档案里面(无限层),如果含有x,就是错误,不能插入
还有x的徐哦有父档案里面(无限层),如果含有y,就有错误,不能插入
比如 插入 (a,b) 这个是错误的 因为 b-> c-> d-> a 形成了死循环
插入(a,d),也是错误的
不能准确表达,就这样描述一下
请问怎么实现比较好
用SQL语句如不行,借助代码 谢谢先~
------解决方案--------------------select @v_count=count(1) from tbl_tmp
while (@v_count > 0)
begin
...
select @v_count=count(1) from tbl_tmp
end
------解决方案----------------------检查父节点是否重复,重复返回-1,可以参照写检查子节点是否重复
CREATE PROCEDURE [getP]
@Son nvarchar(50),
@SourceParent nvarchar(50)
AS
DECLARE @parent nvarchar(50)
DECLARE @return_status int
DECLARE testcursor CURSOR FOR
select FMerch
from Data_Merch
where SMerch = @Son
OPEN testcursor
FETCH NEXT FROM testcursor
into @parent
WHILE @@FETCH_STATUS = 0
BEGIN
if @parent = @SourceParent
begin
return -1
end
exec @return_status = getP @parent,@SourceParent
if @return_status = -1
begin
return -1
end
FETCH NEXT FROM testcursor
into @parent
END
CLOSE testcursor
DEALLOCATE testcursor
return 0
使用:
比如 插入 (a,b)前
exec @return_status = getP 'b ', 'a '
if @return_status = -1
begin
--父节点有重复
end