【问题标题】:types don't match between the anchor and the recursive part "dataitem column"锚点和递归部分“数据项列”之间的类型不匹配
【发布时间】:2018-05-10 22:53:45
【问题描述】:

执行我的 sql 查询时出现错误“锚点和递归之间的类型不匹配”。 我的查询:

;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

【问题讨论】:

  • 不明白为什么类型转换是个问题,但这看起来像无限递归。也许更好的问题是您要做什么,因为我不认为递归 CTE 是您想要的工具。

标签: sql tsql reporting-services ssrs-2012


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多