2017-05-31 56 views
1

林具有defenition的CTE如下CTE口口聲聲說類型不錨和遞歸部分

;With Paths as (
    select s.ID as RootID,t.subject_ID,t.Parent_ID ,t.text, CONVERT(nvarchar(max),t.text) as Path,convert(nvarchar(max),t.subject_ID) as P2 
    from 
     @search s 
      inner join 
     SubjectHierarchy t 
      on 
       s.ID = t.subject_ID 
    union all 
    select p.RootID,t.subject_ID,t.Parent_ID,p.text, t.text + '$' + p.Path,convert(nvarchar(10),t.subject_ID) + '$' + convert(nvarchar(10),p.P2) 
    from Paths p 
      inner join 
     SubjectHierarchy t 
      on 
       p.Parent_ID = t.subject_ID 
) 

但它一直在說的erorr

消息240,級別16,狀態1之間的匹配,步驟f_fetchKeywordVocabullary,行 30遞歸查詢「Paths」的列「P2」中的錨點與 列中的遞歸部分之間的類型不匹配。

我的轉換有什麼問題?

回答

3

在遞歸CTE中,union all中的類型必須與完全匹配。因此,如果聯盟頂部有nvarchar(max),則底部的相應屬性也必須爲nvarchar(max),而不是nvarchar(10)。小數數據類型也一樣; decimal(5, 3)decimal(15, 3)不符。

當然,當類型不能立即識別時,這當然會變得更加複雜,特別是在進行並置和計算時。在這些情況下,你想要將轉換中的連續/計算換行:CONVERT(DECIMAL(15, 3), T1.DecimalAttribute/T2.DecimalAttribute)CONVERT(NVARCHAR(MAX), T1.Text + T2.Text)

+0

哦..好..所以每一處它應該與可變長度匹配..不是嗎?謝謝很多人..這是固定的... –

相關問題