2017-09-18 98 views
-1

我需要在SQL Server中用循環定義一個存儲過程,以在舊的和最新的產品代碼之間創建一個橋表。我不是SQL專家,我遇到了一些麻煩......循環更新SQL存儲過程

我已經有一個包含所有產品代碼更改的源表,但是,我需要創建包含所有OLD產品關係的表代碼與最新的產品代碼。

源表是這樣的:

PRD_OLD ---- PRD_NEW 
00001   ---- 00003 
00002   ---- 00003 
00003   ---- 00004 
00004   ---- 00005 
00006   ---- 00007 

它可以看出,產品1和2對應於產物3.然後3對應於4,然後4對應於5,因此對於1的最新產品ID ,2,3和4應5.

輸出表然後應該是:

PRD_OLD ---- PRD_NEW 
00001   ---- 00005 
00002   ---- 00005 
00003   ---- 00005 
00004   ---- 00005 
00006   ---- 00007 

注:在我的表中的代碼與字母和數字(GUIDS)因此使用最大值碼將無法正常工作...

任何人都可以幫忙嗎?

謝謝!

回答

1

您可以用遞歸CTE做到這一點:

with cte as (
     select prd_old, prd_new, 1 as lev 
     from source 
     union all 
     select cte.prd_old, s.prd_new, lev + 1 
     from cte join 
      source s 
      on cte.prd_new = s.prd_old 
    ) 
select t.* 
from (select cte.*, max(lev) over (partition by prd_old) as max_lev 
     from cte 
    ) t 
where lev = max_lev;