2017-11-27 6 views
1

SQLクエリの実行時にエラーが発生しました。 "型がアンカーと再帰型の間で一致しません"。 マイクエリ:型がアンカーと再帰的な部分 "dataitem column"の間で一致しません

;WITH FA_CTE AS 
(
SELECT 
    fa.name as Data1, 
    fa.lnumber as Data2, 
    fa.allnumber as Data3, 
    fa.productname as Data4 

    FROM 
    (
    SELECT  A.name, A.lnumber, A.allnumber, A.productname 
FROM   soldproduct AS A INNER JOIN Account AS B ON A.account = B.accountid 
) fa 

) 
, tmp1(Data1, Data2, Data3, DataItem , Data4) as (
select Data1, Data2, Data3, LEFT(Data4, CHARINDEX('-',Data4+'-')-1), 
STUFF(Data4, 1, CHARINDEX('-',Data4+'-'), '') 
from FA_CTE 
union all 
select Data1, Data2, Data3, LEFT(Data4, CHARINDEX('-',Data4+'-')-1), 
STUFF(Data4, 1, CHARINDEX('-',Data4+'-'), '') 
from tmp1 

select Data1, Data2, Data3, DataItem AS Data4 
from tmp1 
order by Data1 
+0

なぜタイプ変換が問題なのか分かりませんが、無限再帰のように見えます。再帰的なCTEがあなたが望むツールだとは思わないので、あなたがやろうとしていることは、もっと良い質問かもしれません。 –

答えて

1

SQL Serverは、再帰CTEがで作業した文字列の長さに問題があり、なぜ私に聞かないでください、私は明示的にキャストすることにより、過去にこの問題を解決しました

tmp1(Data1, Data2, Data3, DataItem, Data4) as (
select Data1, Data2, Data3, 
     convert(varchar(max), LEFT(Data4, CHARINDEX('-', Data4 + '-') - 1)), 
     convert(varchar(max), STUFF(Data4, 1, CHARINDEX('-', Data4 + '-'), '')) 
from FA_CTE 
union all 
select Data1, Data2, Data3, 
     convert(varchar(max), LEFT(Data4, CHARINDEX('-', Data4 + '-') - 1)), 
     convert(varchar(max), STUFF(Data4, 1, CHARINDEX('-', Data4 + '-'), '')) 
from tmp1 
+0

私は尋ねません..ありがとう、それは私の問題を解決しています。 –

関連する問題