如何解决如何将T-SQL CTE查询中的uniqueidentifier ID组合为字符串
我想用T-SQL CTE查询中的字符串将逗号分隔uniqueidentifier
:
WITH departmentcte(ID,Name,ParentID,LEVEL,FullPath) AS
(
SELECT
ID,0 AS LEVEL,CAST(Name AS VARCHAR(1024)) AS FullPath
FROM
ItemModels
WHERE
ParentID IS NULL
UNION ALL
SELECT
d.ID,d.Name,d.ParentID,departmentcte.LEVEL + 1 AS LEVEL,CAST(departmentcte.FullPath + '\' + CAST(d.Name AS VARCHAR(1024)) AS VARCHAR(1024)) AS FullPath
FROM
ItemModels d
INNER JOIN
departmentcte ON departmentcte.ID = d.ParentID
)
SELECT ID,FullPath
FROM departmentcte;
它按预期返回此结果:
但是我想得到一个子集的所有ID
所以我尝试执行以下查询,但出现错误
“ SubID”中的绑定部分和递归部分之间的类型不匹配 递归“部门”查询的列。
WITH departmentcte(ID,FullPath,SubIDs) AS
( SELECT ID,CAST(Name AS VARCHAR(1024)) AS FullPath,convert(nvarchar(36),ID) as SubIDs FROM ItemModels WHERE ParentID IS NULL
UNION ALL
SELECT d.ID,CAST(departmentcte.FullPath + '\' + CAST(d.Name AS VARCHAR(1024)) AS VARCHAR(1024)) AS FullPath,( ISNULL(departmentcte.SubIDs,'') + '\' + convert(nvarchar(36),d.ID) ) AS SubIDs
FROM ItemModels d
INNER JOIN departmentcte ON departmentcte.ID = d.ParentID)
SELECT ID,SubIDs FROM departmentcte;
我看到SubID具有nvarchar数据类型,那么问题出在哪里?
解决方法
感谢所有我找到解决方案的人
WITH departmentcte(ID,ParentID,LEVEL,FullPath,SubIDs) AS
( SELECT ID,0 AS LEVEL,CAST(Name AS VARCHAR(1024)) AS FullPath,convert(varchar(2048),ID) as SubIDs
FROM ItemModels WHERE ParentID IS NULL
UNION ALL
SELECT d.ID,d.ParentID,departmentcte.LEVEL + 1 AS LEVEL,CAST( departmentcte.FullPath + ',' + CAST(d.Name AS VARCHAR(1024)) AS VARCHAR(1024)) AS FullPath,CAST( ISNULL(departmentcte.SubIDs,'') + ',' + convert(nvarchar(36),d.ID) AS VARCHAR(2048)) AS SubIDs
FROM ItemModels d INNER JOIN departmentcte ON departmentcte.ID = d.ParentID)
SELECT * FROM departmentcte;
想法是在varchar/nvarchar
的两个字段中使用相同大小的UNION ALL
。
就我而言,它是varchar(2048)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。