Это может быть то, что вам нужно, однако тот факт, что у вас есть EXEC
утверждение в вашем SELECT
, заставляет меня думать иначе.
CREATE PROC Child @uid int, @result nvarchar(MAX) OUTPUT AS
SELECT @result = STUFF((SELECT cid AS cid
FROM db
--Should there be a WHERE here?
FOR XML PATH(N'')),1,1,N'<');
GO
CREATE PROC Parent @uid int AS
DECLARE @result nvarchar(MAX);
EXEC Child @uid, @result OUTPUT;
SELECT @uid UID, @result AS Result;
GO
Это скорее буквальная копия того, что у вас есть в вашем вопросе. Возможно, это то, что вам нужно с помощью функции inline-table:
CREATE FUNCTION Child (@uid int)
RETURNS TABLE
AS RETURN
SELECT STUFF((SELECT cid AS cid
FROM db
--Should there be a WHERE here?
FOR XML PATH(N'')),1,1,N'<') AS cid;
GO
CREATE PROC Parent @uid int AS
SELECT @uid UID,
C.cid
FROM [Table]
CROSS APPLY dbo.Child(@uid) C
GO
Как я уже говорил в комментариях, кажется, что здесь не хватает ГДЕ или чего-то еще.