UNION ALL 的问题

ZXY900213 2013-08-01 12:02:59
;WITH CTE AS
(
SELECT [FolderID],[ParentID],CAST([FolderID] AS VARCHAR)+'\' AS [FolderPath]
FROM [Folder] WHERE [FolderID]=28

UNION ALL

SELECT F.[FolderID],F.[ParentID],[FolderPath]+CAST(F.[FolderID] AS VARCHAR)+'\' FROM [Folder] AS F
INNER JOIN CTE ON F.[ParentID]=CTE.[FolderID]
)
SELECT * FROM CTE

为什么这句sql执行不了,提示类型不匹配,但是我都转换为varchar了啊。我的[FolderID]是INT类型
下面这样则可以执行成功,为什么??
;WITH CTE AS
(
SELECT [FolderID],[ParentID],CAST([FolderID] AS VARCHAR)+'\' AS [FolderPath]
FROM [Folder] WHERE [FolderID]=28

UNION ALL

SELECT F.[FolderID],F.[ParentID],CAST(F.[FolderID] AS VARCHAR)+'\' FROM [Folder] AS F
INNER JOIN CTE ON F.[ParentID]=CTE.[FolderID]
)
SELECT * FROM CTE


如果解决??求解释。。。
...全文
93 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzw_0736 2013-08-01
  • 打赏
  • 举报
回复
原因我也不清楚,只是實際使用過程中偶然發現的規則.
ZXY900213 2013-08-01
  • 打赏
  • 举报
回复
引用 1 楼 lzw_0736 的回复:

--試試以下:
;WITH CTE AS
(
    SELECT [FolderID],[ParentID],CAST(CAST([FolderID] AS VARCHAR)+'\'  AS VARCHAR) AS [FolderPath]
    FROM [Folder] WHERE [FolderID]=28
     
    UNION ALL
     
    SELECT F.[FolderID],F.[ParentID],CAST([FolderPath]+CAST(F.[FolderID] AS VARCHAR)+'\' AS VARCHAR) FROM [Folder] AS F
    INNER JOIN CTE ON F.[ParentID]=CTE.[FolderID]
)
SELECT * FROM CTE
果然可以了,,为什么varchar类型相加,数据类型会变呢??
lzw_0736 2013-08-01
  • 打赏
  • 举报
回复

--試試以下:
;WITH CTE AS
(
    SELECT [FolderID],[ParentID],CAST(CAST([FolderID] AS VARCHAR)+'\'  AS VARCHAR) AS [FolderPath]
    FROM [Folder] WHERE [FolderID]=28
     
    UNION ALL
     
    SELECT F.[FolderID],F.[ParentID],CAST([FolderPath]+CAST(F.[FolderID] AS VARCHAR)+'\' AS VARCHAR) FROM [Folder] AS F
    INNER JOIN CTE ON F.[ParentID]=CTE.[FolderID]
)
SELECT * FROM CTE

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧