Вы можете cast
целочисленное значение для varchar:
SELECT [UserID],
STUFF((SELECT ',' + CAST(UserID as VARCHAR(100))
FROM #RelatedIDs
WHERE (UserID = t.UserID)
FOR XML PATH('')) ,1,1,'') AS RelIDs
FROM #RelatedIDs t
GROUP BY UserID
Если вы используете последнюю версию SQL Server (2017 или выше), вы можете получить тот же результат в гораздо менее запутанный способ с string_agg()
:
SELECT t.UserID, STRING_AGG(r.UserID, ',') RelIDs
FROM #RelatedIDs t
INNER JOIN #RelatedIDs r on r.UserID = t.UserID
GROUP BY t.UserID
С таким запросом ясно видно, что он не имеет большого смысла. Самосоединение работает с тем же столбцом, что и столбец, определяющий группу, поэтому это просто сгенерирует список идентичных UserID
s в столбце RelIDs
(по одному на каждый случай данного UserID
в исходном запросе) .