1. 程式人生 > >定位點型別和遞迴部分的型別不匹配,如何解決?

定位點型別和遞迴部分的型別不匹配,如何解決?

在對BOM表彙總查詢的時候,做了一個小的改動,就出現了下面的我問題:

伺服器: 訊息 240,級別 16,狀態 1,行 1
在遞迴查詢 "Bom1" 的列 "UsedQty" 中,定位點型別和遞迴部分的型別不匹配。

其中Mom1是自己定義的表名。

CSDN上有說:定位點成員和遞迴成員的型別需要一致.. 所以這裡將定位點的routes轉換為varchar,而遞迴成員也轉換為varchar。

所以,只要把計算結果進行資料型別轉換就可以了。

開始的時候沒有加Cast(),也就是黃色部分,就一直報上面的錯誤,這是修改後的SQL語句:

with Bom1(BomID,mInvCode1,mInvCode2,bInv,BaseQtyN,BaseQtyD, UsedQty,layer,cInvName,cInvStd,ccomunitname,InvAttr,bself,bPurchase) as
(
select bb.BomID,a.InvCode,a.InvCode,b.InvCode,bo.BaseQtyN, bo.BaseQtyD, cast(bo.BaseQtyN / bo.BaseQtyD as nvarchar(4000)) as UsedQty

,1 as layer,i.cInvName,i.cInvStd,c.ccomunitname,
InvAttr = (case when i.bself = 1 then '自制'
 when i.bself =0 and i.bPurchase = 1 then '採購'
 else '無'
 end),
i.bself, i.bPurchase
from Bom_Bom as bb
...

...

...
union all
select Bom1.BomID,Bom1.mInvCode1,a.InvCode,b.InvCode,bo.BaseQtyN, bo.BaseQtyD, cast(bo.BaseQtyN / bo.BaseQtyD * Bom1.UsedQty as nvarchar(4000)) as UsedQty

, layer + 1,i.cInvName,i.cInvStd,c.ccomunitname,
InvAttr = (case when i.bself = 1 then '自制'
 when i.bself =0 and i.bPurchase = 1 then '採購'
 else '無'
 end),
i.bself, i.bPurchase
from Bom_Bom as bb
...

...

...
...