错误:锚和递归部分之间的类型不匹配,十进制数据类型的递归cte

时间:2011-06-09 07:54:16

标签: sql sql-server-2005 tsql common-table-expression

  

可能重复:
  CTE error: “Types don't match between the anchor and the recursive part”

我有以下内容

declare @t table (id int identity,Price decimal(6,2))
insert into @t
    select 17.5 union all 
    select 10.34 union all 
    select 2.0 union all 
    select 34.5

现在如果我按如下方式编写查询

;with cte(id, price) as 
(
    select id, price
    from @t 
    union all
    select cte.id, cte.price + t.price
    from cte 
        join @t t
           on cte.id < t.id
)
select *
from @t

我在运行时收到以下错误:

  

锚点之间的类型不匹配   和递归部分......

我甚至在类型转换后(尝试十进制)尝试相同但结果相同....

但是,如果我将其类型转换为int它可以工作......但不应该是这种情况(:

1 个答案:

答案 0 :(得分:2)

修复:

;with cte(id,price) as 
(
    Select id, price from @t 
    Union all
    Select cte.id, cast(cte.price + t.price as decimal(6,2))
    From cte 
    Join @t t
    On cte.id < t.id
)
Select * from @t

说明:

表达式cte.price + t.price将返回不一定是十进制(6,2)的类型,可以返回十进制(5,2)。因此,之后它无法将这两个值结合起来。