锚点和递归部分之间的类型不匹配 "dataitem column"
types don't match between the anchor and the recursive part "dataitem column"
我在执行 sql 查询 "types don't match between the anchor and the recursive" 时遇到错误。
我的查询:
;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
不要问我为什么 SQL 服务器在使用递归 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
我在执行 sql 查询 "types don't match between the anchor and the recursive" 时遇到错误。 我的查询:
;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
不要问我为什么 SQL 服务器在使用递归 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