Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 类型don';t锚和递归部分之间的匹配”;“数据项列”;_Sql_Tsql_Reporting Services_Ssrs 2012 - Fatal编程技术网

Sql 类型don';t锚和递归部分之间的匹配”;“数据项列”;

Sql 类型don';t锚和递归部分之间的匹配”;“数据项列”;,sql,tsql,reporting-services,ssrs-2012,Sql,Tsql,Reporting Services,Ssrs 2012,我在执行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

我在执行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
)


不要问我为什么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

不明白为什么类型转换是个问题,但这看起来像是无限递归。也许更好的问题是你想做什么,因为我不认为递归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