我有一个如下的CTE,它实际上是从VSTS数据中查找所有工作项及其父项。
/Hazelcast-jet-3.0/lib
但是我收到如下铸造错误。
消息240,第16级,状态1,第8行 递归查询“ cte”的列“ ParentTitle”中的锚点和递归部分之间的类型不匹配。
由于标题字段只是varchar类型,所以我不明白这个问题。那么为什么类型不匹配?
答案 0 :(得分:2)
在union all
的第一部分中,我认为您在创建'' as ParentTitle
时要明确一些,以便它实际上是列的类型。例如convert(varchar(30), null) as ParentTitle
。
答案 1 :(得分:2)
我本人承认,我搜索了您的错误消息,并发现this SO question讨论了类似的问题。
这里的窍门是,即使您的两列都是文本,它们也不是同一类型的文本(例如,宽度等)。
假设tbl_VSTS_AllWorkItems.title
列为varchar(50)
,您可以通过将空字符串也强制转换为varchar(50)
来解决此错误,例如
WITH cte (wtype,id,parent,title,ptype,WILevel,ParentTitle) AS (
SELECT ..., CAST('' AS varchar(50)) AS ParentTitle
FROM tbl_VSTS_AllWorkItems
WHERE ...
UNION ALL
SELECT ..., t2.title
FROM tbl_VSTS_AllWorkItems
WHERE ...
)
侧面说明:您只需要在联合查询的第一个选择中使用别名。实际上,联合的后续部分中的别名将被忽略。