我有一张桌子,有客户及其共同客户。例如,客户1有一个共同客户2.客户1也是客户3的共同客户。
我正在尝试对所有已关联的客户进行分组,并为其分配相同的GroupCustNo
。在下表1-2中链接,3-1链接。所以2-3也有联系。因此,下表中1到8的所有客户都相互关联,并且具有相同的GroupCustNo
。
tbl_GroupCustomers :
CustNo JtCustNo GroupCustNo
--- ------- ------
1 2 null
2 null null
3 1 null
4 1 null
4 5 null
5 6 null
5 7 null
6 null null
7 null null
8 5 null
我写的递归存储过程如下。我在每个CustNo的while循环中调用它:
exec usp_UpdateGroupCustomerNo 1, 1
对于大多数客户,存储过程成功运行但是已经抛出
某些客户的错误达到32的递归限制
。这些客户拥有许多共同客户,也是其他客户的共同客户。
这似乎递归不会在这里工作,我不知道如何继续。如果有其他方法可以解决这个问题,请告诉我。
CREATE PROCEDURE [dbo].[usp_UpdateGroupCustomerNo]
@MainCustNo int, @GrpNo int
AS
declare @JtCustNo int; declare @MainCustNo2 int;
if exists(select 1 from tbl_GroupCustomer
where CustNo = @MainCustNo and groupcustomernumber is null)
begin
update tbl_GroupCustomer
set groupcustomernumber = @grpno
where CustNo = @MainCustNo
and groupcustomernumber is null
DECLARE db_cursor CURSOR LOCAL FOR
select JtCustNo
from tbl_GroupCustomer
where CustNo = @MainCustNo and JtCustNo is not null
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @JtCustNo
WHILE @@FETCH_STATUS = 0
BEGIN
select @JtCustNo as JtCustNo
exec usp_UpdateGroupCustomerNo @JtCustNo, @GrpNo
DECLARE db_cursor2 CURSOR LOCAL FOR
select CustNo
from tbl_GroupCustomer
where JtCustNo = @JtCustNo
and groupcustomernumber is null
OPEN db_cursor2
FETCH NEXT FROM db_cursor2 INTO @MainCustNo2
WHILE @@FETCH_STATUS = 0
BEGIN
if exists(select 1 from tbl_GroupCustomer
where CustNo = @MainCustNo2
and groupcustomernumber is null)
begin
exec usp_UpdateGroupCustomerNo @MainCustNo2, @GrpNo
end
FETCH NEXT FROM db_cursor INTO @MainCustNo2
END
CLOSE db_cursor2
DEALLOCATE db_cursor2
FETCH NEXT FROM db_cursor INTO @JtCustNo
END
CLOSE db_cursor
DEALLOCATE db_cursor
END