Ahora ya sí que sí que casi está, eso sí, he tenido que recurrir a un cursor:
Código:
ALTER FUNCTION dbo.FN_BuscaSinonimos
(@id int)
RETURNS varchar(500)
AS
BEGIN
DECLARE @retorno varchar(500), @Nombre varchar(250)
SET @retorno = ''
IF EXISTS (SELECT Nombre FROM clasificaciones WHERE SinonimoDe = @id)
BEGIN
DECLARE curs cursor FOR
SELECT Nombre FROM clasificaciones WHERE SinonimoDe = @id
OPEN curs
FETCH NEXT FROM curs INTO @Nombre
WHILE @@FETCH_STATUS = 0
BEGIN
IF @retorno = ''
BEGIN
SELECT @retorno = @retorno + @Nombre
END
ELSE
BEGIN
SELECT @retorno = @retorno + ', ' + @Nombre
END
FETCH NEXT FROM curs INTO @Nombre
END
CLOSE curs
DEALLOCATE curs
SET @retorno = 'Sinónimos de '+(SELECT Nombre FROM clasificaciones WHERE ID = @id)+': '+@retorno
END
ELSE
SET @retorno = 'No hay sinónimos de '+(SELECT Nombre FROM clasificaciones WHERE ID = @id)
RETURN @retorno
END
Bien, pero para SELECT dbo.FN_BuscaSinonimos(24) devuelve esto:
Cita: Sinónimos de Gnetopsida : Gnetatae
Cuando debería devolver:
Cita: Sinónimos de Gnetopsida : Gnetatae, Pepe
Y es seguro porque esto:
'SELECT COUNT(*) FROM clasificaciones WHERE SinonimoDe = 24' da 2