日期:2014-05-18  浏览次数:20479 次

请问: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