Ver Mensaje Individual
  #19 (permalink)  
Antiguo 24/01/2006, 07:22
Avatar de Bravenap
Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 4 meses
Puntos: 4
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
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!